Когда я компилирую с Xcode и запускаю это, я получаю ошибку, по крайней мере, 100 раз подряд, malloc: *** error for object 0x100180: double free
, с отладчиком, указывающим на line C
. Как ни странно, в коде, из которого я это извлек, возникает та же самая ошибка, но отладчик указывает на эквивалент line B
. Я пытался, но не смог воспроизвести это.
Если я удаляю line A
, код работает, но я получаю серьезную утечку памяти, которая приводит к сбою программы примерно через 1 минуту. Удаление line C
решает проблему, но не является правильным решением, потому что тогда a_class
не имеет надлежащего деструктора.
#include <iostream>
#include <vector>
struct a_struct
{
int* dynamic_array;
a_struct(int length) {dynamic_array = new int [length];}
a_struct() : dynamic_array(NULL) {}
~a_struct() { if (dynamic_array != NULL) {delete [] dynamic_array;} } //Line A
};
class a_class
{
public:
a_struct* the_structs;
a_class() {Init();}
a_class(a_class const & origin) {Init();}
void Init(){
the_structs = new a_struct [10]; //Line B
for(int q=0; q<10; q++)
the_structs[q] = a_struct(7);}
~a_class() { if (the_structs != NULL) {delete [] the_structs;} } //Line C
};
int main ()
{
std::vector <a_class> the_objects;
for(int q=0; q<10; q++)
the_objects.push_back(a_class());
while(1)
for(int q=0; q <10; q++)
for(int w=0; w <10; w++)
the_objects[q].the_structs[w] = a_struct(7);
}