Вы не выделяете достаточно места для своей структуры - вы только выделяете ценность указателя (4 или 8 байт, в зависимости от размера указателя), когда на самом деле вы должны располагать где-то порядка 36 байтов ( в частности, sizeof(VRfile)
. Итак, вы топаете кучу, записывая в нее случайные значения (так называемое переполнение кучи ), что приводит к путанице в структурах данных, используемых malloc
для отслеживания памяти. Когда он обнаруживает это повреждение, он поднимает руки и завершает вашу программу.
Однако, поскольку это C ++, а не C, вам действительно следует использовать operator new
вместо malloc
для выделения динамической памяти. Вам не нужно иметь дело с размером памяти, которую вы выделяете, это подразумевается в типе переменной. Во-вторых, нет причины всегда говорить struct VRfile
вместо просто VRfile
- это необходимо только в простом C-коде (не C ++), и только тогда, когда нет правильного typedef
(который обычно есть).
Итак, просто напишите это:
VRfile *vrinfo = new VRfile;
И, конечно, когда вы удаляете свою карту (или удаляете с нее любой элемент), обязательно удалите каждое значение в ней, чтобы избежать утечки памяти. Например:
// This could also be implemented using a functor and std::for_each
for(std::map<int, VRfile*>::iterator iter = maps.begin(); iter != maps.end(); ++iter)
delete iter->second;
maps.clear();