在我的一个对象中,我创建了一个无符号字符数组成员来存储一些图像数据:
unsigned char* imageData;
在构造函数中我用 new 初始化它:
MyObject::MyObject()
{
int imageSize = 6054400;
imageData = new unsigned char[imageSize];
}
imageData 在整个循环过程中被填充。
此对象 (MyObject) 直到循环结束时才会被删除,但我需要在循环中途删除 imageData。所以我刚刚创建了这个函数:
void MyObject::DeleteAllMembers
{
delete [] imageData;
}
我在循环结束时调用它:
theObj.DeleteAllMembers();
问题是每次我的程序到达代码行时:
delete [] imageData;
它崩溃了,留下了这个错误信息:
此时我不知道为什么会这样。
我尝试过的一些事情是:
- 用 imageSize+1 而不仅仅是 imageSize 初始化 imageData
- 将删除命令移至析构函数并在每次循环中手动删除对象
- 使用 delete imageData 而不是 delete [] imageData,尽管我相当确定我需要使用 delete []
- 删除后我尝试执行
imageData = 0
,不幸的是我的程序仍然在delete [] imageData
行崩溃。 - 我试过使用
memset(&imageData, 0, imageSize);
,但这给了我一个访问冲突错误。
每次,程序仍然在同一行崩溃。我知道有人在看我的代码时在想“你这个白痴,你所要做的就是__________________”。有人可以告诉我我做错了什么吗?
编辑:抱歉我说错了。我每次在loop开始时创建这个对象,在loop结束时被删除,我不知道为什么我在开始和结束时说程序。
最佳答案
你可能想做一点添加来防止多次删除同一个指针:
void MyObject::DeleteAllMembers
{
delete [] imageData;
imageData = 0; // <-- here
}
关于c++ - 无法删除 unsigned char* 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14813918/