проблема с алмазом — ошибка кучи C ++ _CrtlsValidHeapPointer (pUserData)

После компиляции с MSVC моя программа вызывает ошибку подтверждения во время выполнения: _CrtlsValidHeapPointer (pUserData) , но код выглядит нормально для меня …

class A
{
int a;
public:
A();
A(int);
virtual ~A();
void setA(int);
int getA();
virtual void function()=0;
};

class B : virtual public A
{
int b;
public:
B();
B(int,int);
void setB(int);
int getB();
void function();
};

class C : virtual public A
{
int c;
public:
C();
C(int,int);
void setC(int);
int getC();
void function();
};

class D :public B,public C
{
int d;
public:
D();
D(int,int,int,int);
void setD(int);
int getD();
void function();
};

int _tmain(int argc, _TCHAR* argv[])
{
A **p = new A*[4];
int i;
for(i=0;i<4;i++)
{
p[i]=new D(4,3,12,1);
}
for(i=0;i<4;i++)
{
p[i]->function();
}
for(i=0;i<4;i++)
{
delete p[i]; //the assertion fails when attempting to delete p[1]
}
delete[] p;
system("pause");
return 0;
}

Что не так с моим кодом?

1

Решение

Вам нужен виртуальный деструктор в A, Здесь не нужно ничего делать, но оно должно быть объявлено как virtual,

В общем случае, если вы удаляете объект производного типа через указатель на базовый тип, базовый тип должен есть виртуальный деструктор.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector