在我的一个对象中,我创建了一个无符号字符数组成员来存储一些图像数据:
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);
,但这给了我一个访问冲突错误。
每次,程序仍然在同一行崩溃。我知道有人在查看我的代码时在想“你这个白痴,你所要做的就是____________________”。有人可以告诉我我做错了什么吗?
编辑:对不起,我说的不正确。我每次在循环开始时创建这个对象并在循环结束时被删除,我不知道为什么我在程序的开始和结束时说。