c++ - 无法删除 unsigned char* 数组

标签 c++ object memory heap-memory

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

    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;

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

error

此时我不知道为什么会这样。

我尝试过的一些事情是:

  • 用 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/

相关文章:

C++对象,动态和静态的区别

c++ - 如何验证用户登录到域或本地

c - 我不明白我是如何遇到段错误的

c++ - 在 C++ 中实现高效的多线程文件 I/O

javascript - 将点符号字符串转换为对象并查找引用对象

php - 如何获取此对象中的值?

c# - 枚举一个对象的属性并将其复制到另一个相同类型的对象

c - 使用函数为链表创建项目时丢失数据(并添加随机节点)

c++ - 为什么动态内存允许在运行时操作数组?

c++ - 在 Linux 上的 QT 应用程序中识别控件名称/ID