无法删除unsigned char*数组

xcd*_*n05 2 c++ memory heap object

在我的一个对象中,我创建了一个无符号字符数组成员来存储一些图像数据:

    unsigned char* imageData;
Run Code Online (Sandbox Code Playgroud)

在构造函数中,我用new初始化它:

    MyObject::MyObject()
    {
        int imageSize = 6054400;
        imageData = new unsigned char[imageSize];
    }
Run Code Online (Sandbox Code Playgroud)

imageData在整个循环过程中被填充.

直到循环结束时才会删除此对象(MyObject),但我需要在循环中途删除imageData.所以我刚刚创建了这个函数:

    void MyObject::DeleteAllMembers
    {
        delete [] imageData;
    }
Run Code Online (Sandbox Code Playgroud)

我在循环结束时调用它:

    theObj.DeleteAllMembers();
Run Code Online (Sandbox Code Playgroud)

问题是每次我的程序进入代码行:

    delete [] imageData;
Run Code Online (Sandbox Code Playgroud)

它崩溃了,留下这个错误信息:

错误

在这一点上,我不知道为什么会这样.

我尝试过的一些事情是:

  • 使用imageSize + 1而不仅仅是imageSize初始化imageData
  • 将delete命令移动到析构函数并手动删除每个遍历循环的对象
  • 使用delete imageData而不是delete [] imageData,即使我很确定我需要使用delete []
  • imageData = 0删除它后尝试过,不幸的是我的程序仍在崩溃delete [] imageData.
  • 我尝试过使用memset(&imageData, 0, imageSize);,但这给了我一个访问冲突错误.

每次,程序仍然在同一行崩溃.我知道有人在看我的代码,认为"你好,你要做的就是____________________." 有人可以告诉我我做错了什么吗?

编辑:对不起我说错了.我每次在开始时创建该对象循环和它能够在结束时删除循环,我不知道为什么我在节目的开头和结尾说.

Ale*_*nze 5

您可能需要稍加添加以防止多次删除同一指针:

void MyObject::DeleteAllMembers
{
    delete [] imageData;
    imageData = 0; // <-- here
}
Run Code Online (Sandbox Code Playgroud)