Ошибка работы с памятью

Рейтинг: 0Ответов: 2Опубликовано: 13.06.2011

Есть массив структур:

struct structCell
{  
    void * ptrData; //Указатель на данные в ячейке  
    unsigned char TypeOfCell; //Тип данных хранимых в ячейке  
};
structCell *arrStruct=new structCell [1000];

В цикле arrStruct[0..999] указатель ptrData=(void * )new long, либо ptrData=new (void * )double[10], перед удалением массива структур (delete[] arrStruct), освобождаю память в цикле delete ptrData, либо delete[] ptrData в зависимости от типа TypeOfCell. Но выскакивает ошибка: _BLOC_TYPE_IS_VALID(pHEAD->nBlockUse). Что я делаю не так?

Ответы

▲ 1Принят
structCell *arrStruct=new structCell [1000];

после этой строки я бы еще проинициализировал память:

memset((void*)arrStruct, 0, sizeof(structCell)*1000);

В этом случае легко обнаружить клетки, в которых есть данные и удалить их... Надеюсь, это поможет

▲ 1

Используйте boost::any или boost::variant. Про отличия можно почитать тут