class ParentClass {
protected:
int* intArray;
public:
~ParentClass(){
delete [] intArray;
}
};
class ChildClass : public ParentClass {
public:
ChildClass() : ParentClass() {
intArray = new int[5];
}
};
int main(int argc, const char * argv[]) {
ChildClass child;
child.~ChildClass(); //This line crashes the program. why??
}
Специфическая ошибка, которую он выдает: инициализации (37640,0x7fff78623300) таНос: * ошибка для объекта 0x100100aa0: указатель освобождения не было выделено * установить контрольную точку в malloc_error_break для отладкиПочему вызов деструктора класса Base приводит к сбою этой программы?
указатель ссылается на intArray
, объявленный в ParentClass
, ошибка указывает, что память не была выделена, но она была назначена в конструкторе ChildClass
.
Может кто-нибудь объяснить, в каком процессе это происходит, чтобы сгенерировать эту ошибку?
Вы уверены, что это * это * строка, а не переменная 'child', выходящая из области видимости и имеющая свой деструктор, называемый * снова *? –
Означает ли указанная строка аварийное завершение программы, или существование линии приводит к сбою программы позже? –
wot r u doing m8 –