【发布时间】:2013-01-26 15:49:50
【问题描述】:
在我的一个对象中,我创建了一个无符号字符数组成员来存储一些图像数据:
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结束时被删除,我不知道为什么我在开始和结束时说程序。
【问题讨论】:
-
你遵守三法则吗?是不是循环中的同一个对象,在这种情况下会发生双释放。
-
此语句:
theObj.DeleteAllMembers;确实不调用DeleteAllMembers。你需要theObj.DeleteAllMembers()。 -
今天我了解到我在输入没有红色下划线来纠正错误的代码方面是多么糟糕。
标签: c++ object memory heap-memory