2013-02-25 50 views
1

奇怪的错误于是我找来了A类和B类,其中A类是基类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 2013-02-25 04:20:40

+2

每一次删除都应该使用一个新的。同时使用或不使用。 – 2013-02-25 04:21:37

+0

没有'new' no'delete' – billz 2013-02-25 04:21:38

回答

3

对于您没有手动分配内存的变量,您不能调用delete

2

在您的代码der不是一个动态分配的对象。即,它不使用new进行分配。所以你不应该在该对象上使用delete。一旦超出范围,对象将自动销毁。如果要使用delete,则应使用new

A * test = new B(222); 
delete test;