2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Менеджер памяти в С++
Сообщение25.06.2015, 14:54 


04/05/13
125
Добрый день!
Написал менеджер памяти на С++, который выделяет память методом 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 


11/12/14
893
Чтобы разыменовывать указатель (*hashTableArray) надо сперва проинициализировать указатель (hashTableArray = ...).
Не вижу этого в коде.

 Профиль  
                  
 
 Re: Менеджер памяти в С++
Сообщение25.06.2015, 16:41 


04/05/13
125
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 
Аватара пользователя


07/02/12
1403
Питер
inky в сообщении #1030796 писал(а):
Добрый день!
Написал менеджер памяти на С++, который выделяет память методом best fit.

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group