删除动态内存时获取断言失败错误

时间:2013-11-20 04:54:34

标签: c++ debugging visual-studio-debugging

这里我声明一个指针的数组,然后从类print()调用A方法

A *ptr1[10];

ptr1[0]= new A;

ptr1[0]->print();   

上面工作正常,但是当我尝试删除它时显示断言失败错误

delete[] ptr1;

我正在使用Visual Studio 2010

错误详情:

enter image description here

2 个答案:

答案 0 :(得分:3)

ptr1是一个指向A的指针数组。由于你没有通过new分配ptr1本身,所以你不应该delete它。

ptr1[0]是指向您分配的A的指针。所以你只需要做delete ptr1[0]

答案 1 :(得分:1)

好的方法:

#define SIZE 10

A *ptr1[SIZE];

// allocate and do print
for(int i = 0; i < SIZE; i++)
{
    ptr1[i]= new A();
    ptr1[i]->print(); 
}


// deletion
for(int j = 0; j < SIZE; j++)
{
    if(ptr1[j] != NULL)
    {
        delete ptr1[j];
        ptr1[j] = NULL;
    }
}