gpt4 book ai didi

c++ - 删除结构数组时 VS 2010 C++ 崩溃

转载 作者:行者123 更新时间:2023-11-28 00:30:54 25 4
gpt4 key购买 nike

我有一个类,其成员函数 mBoundingBox 由以下结构组成

typedef struct
{
unsigned int xMin;
unsigned int yMin;
unsigned int xMax;
unsigned int yMax;
} boundingBox;

class CImgProc
{
public:
CImgProc(void);
virtual ~CImgProc(void);
...
boundingBox *mBoundingBox;
...
}

在代码中我分配成员:

mBoundingBox = new boundingBox [mBlobCnt];

摆弄它(不要给它分配任何指针,只使用数组索引),然后,当我退出时我:

if (mBoundingBox != NULL) delete [] mBoundingBox;

这会导致错误。

有任何输入吗?

更新信息。该错误确实发生在析构函数终止时。 VS生成的消息是:

Windows has triggered a breakpoint in ProcImage.exe.

这可能是由于堆损坏,...

这也可能是由于用户在 ProcImage.exe 具有焦点时按了 F12。

输出窗口可能有更多的诊断信息。

我在构造函数中将指针设置为 NULL,然后在需要时分配(使用 new)。指针有效,但显然不在堆上(在 dbgheap.c 中中断)。

一旦我分配了内存,我就不会碰巧用它做任何指针魔术。在这种情况下,我循环浏览图像并收集统计数据。然后我使用存储在这个内存中的统计数据来绘制我的图像,但是,再次以相当蛮力的方式,所以没有其他东西可以使用这个内存。

我使用 new 创建结构数组是合法的,不是吗?

呸!!!抱歉浪费你们的时间。我深挖了一下,发现我的创建和销毁都很好,但是在中间的某个地方我设置了 mBoundingBox[X] 的值。无论结果在哪里,X 都是创建的数组的暗淡。典型的用户错误,只是错误出现的令人惊讶的地方。

最佳答案

很可能您要删除数组两次。为了更好地管理它,请使用

delete[] mBoundingBox;
mBoundingBox = 0;

代替

if (mBoundingBox != NULL) delete [] mBoundingBox;

或者甚至更好地使用智能指针。

关于c++ - 删除结构数组时 VS 2010 C++ 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22987881/

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