gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:45:56 26 4
gpt4 key购买 nike

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

    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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com