2013-02-25 3 views
1

Таким образом я получил класс А и класс В, где класс А является базовым классом класса B. Однако, когда я делаю что-то вроде этого:странно ошибка при удалении переменной

int main() 
{ 
    B der(222); 
    A* test; 
    test = &der; 
    delete test; 
} 

Я получил ошибку:

debug assertion failed! 

program:....... 
line 52 

Expression:_BLOCK_TYPE_IS_VALID(pHead0>nBlockUse) 

любая идея?

+8

'der' имеет автоматическое хранение. Он будет автоматически отменен. Вызов 'delete' на его адрес является незаконным (и вызывает неопределенное поведение). – jogojapan

+2

Каждому удалению следует противопоставить новое. Используйте оба или оба. –

+0

no 'new' no' delete' – billz

ответ

3

Вы не можете позвонить delete на переменную, для которой вы не вручную выделяли память.

2

В вашем коде der не является динамически выделяемым объектом. т.е. он не выделяется с использованием new. Поэтому вы не должны использовать delete на этом объекте. der объект будет автоматически уничтожен, как только он выйдет за рамки. Если вы хотите использовать delete, то вы должны создать объект с помощью new

A * test = new B(222); 
delete test; 
Смежные вопросы