2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Менеджер памяти в С++
Сообщение25.06.2015, 14:54 
Добрый день!
Написал менеджер памяти на С++, который выделяет память методом best fit. Мне надо выделить память под массив указателей и я не могу понять как это сделать. Пробовал так:
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
        int tableSize, fullSize;
        element **hashTableArray;
public:
HashTable(MemoryManager& mem, int size) : AbstractTable(mem)
        {
                tableSize = 0;
                fullSize = size;
                size_t elemsize = sizeof(element *);
                *hashTableArray = static_cast<element *>(mem.allocMem(fullSize * elemsize));
                //hashTableArray = new element*[fullSize];
                for (int i = 0; i < fullSize; i++)
                {
                        //hashTableArray[i] = NULL;
                        new(hashTableArray + i * elemsize)element*(NULL);
                }
        }
 

Выдает исключение: нарушение прав доступа при записи в строке
Используется синтаксис C++
*hashTableArray = static_cast<element *>(mem.allocMem(fullSize * elemsize));           
 

Как правильно это сделать? Пока я использовал обычный new для выделения памяти под этот массив, allocmem под все остальное, все работало прекрасно.

 
 
 
 Re: Менеджер памяти в С++
Сообщение25.06.2015, 15:21 
Чтобы разыменовывать указатель (*hashTableArray) надо сперва проинициализировать указатель (hashTableArray = ...).
Не вижу этого в коде.

 
 
 
 Re: Менеджер памяти в С++
Сообщение25.06.2015, 16:41 
aa_dav
Понятно. Исправил
Код:
*hashTableArray = static_cast<element *>(mem.allocMem(fullSize * elemsize));

на
Код:
hashTableArray = static_cast<element **>(mem.allocMem(fullSize * elemsize));


Мне нужно чтобы был массив указателей типа element* длиной fullsize и чтобы они все указывали на NULL. Как мне это сделать? Подозреваю что это
Код:
new(hashTableArray + i * elemsize)element*(NULL);

неправильно.

-- 25.06.2015, 18:52 --

аа все :facepalm:
оказалось нужно просто
Код:
hashTableArray[i] = NULL;

намудрил с placement new :facepalm:
спасибо)

 
 
 
 Re: Менеджер памяти в С++
Сообщение14.11.2015, 14:36 
Аватара пользователя
inky в сообщении #1030796 писал(а):
Добрый день!
Написал менеджер памяти на С++, который выделяет память методом best fit.

А можно поинтересоваться, зачем Вы написали такой менеджер памяти?

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group