VS 2010 C++在删除结构数组时崩溃
VS 2010 C++ Crash when deleting an array of structures
我有一个类,它的成员函数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];
随意使用它(不要给它分配任何指针,只使用数组索引),然后,当我退出时,I:
if (mBoundingBox != NULL) delete [] mBoundingBox;
这导致了一个错误。
有什么意见吗?
更新信息。该错误确实发生在析构函数的终止处。VS生成的消息是:
Windows在ProcImage.exe中触发了断点。
这可能是由于堆损坏。。。
这也可能是由于用户在ProcImage.exe具有焦点时按下F12。
输出窗口可能具有更多诊断信息。
我在构造函数中将指针设置为NULL,然后在需要时分配(使用new)。指针是有效的,但显然不在堆上(break位于dbgheap.c中)。
一旦我分配了内存,我就不会用它做任何指针魔术。在这种情况下,我会循环浏览图像并收集统计数据。然后我使用存储在这个内存中的统计数据回到我的图像中,但同样,以一种相当暴力的方式,所以没有其他东西利用这个内存。
对我来说,使用new来创建结构数组是合法的,不是吗?
Doh!!!很抱歉浪费你们的时间。我重新挖掘,发现我的创造和毁灭都很好,但在中间的某个地方,我设置了mBoundingBox[X]
的值。无论它在哪里,X都是创建的数组的昏暗。典型的用户错误,只是错误出现的一个令人惊讶的地方。
很可能您已经删除了两次数组。为了更好地管理它,请使用
delete[] mBoundingBox;
mBoundingBox = 0;
而不是
if (mBoundingBox != NULL) delete [] mBoundingBox;
或者更好地使用智能指针。
首先,以下检查是错误的
if (mBoundingBox != NULL) delete [] mBoundingBox;
new在分配内存失败时不会返回NULL,而是抛出异常。
如果你想像现在这样继续,请使用另一个版本的"new"。在另一个版本中,new将返回NULL,而不是引发异常。
mBoundingBox = new (std::nothrow) boundingBox [mBlobCnt];
相关文章:
- 类对象数组的问题会导致崩溃
- 字节数组初始化会导致 DirectX 崩溃
- 使用 sf::Text 数组时崩溃
- For 循环在尝试读取数组 c++ 时程序崩溃
- 删除数组 c++ 崩溃问题
- 如果类的成员,C++数组会导致崩溃
- 在C++中删除指针数组时析构函数崩溃
- 在 C++ 中使用平展数组语法,崩溃取决于宽度/高度
- 我的单例中的数组在离开函数后没有保留信息,然后在尝试再次访问信息时崩溃
- C++ rezing 动态数组最多可以处理一定数量的元素,但在某些时候会崩溃并显示错误 (0XC0000005)
- 释放字符的动态数组时崩溃
- size_t结构非数组成员崩溃的强制转换
- C++程序在迭代到数组的最后一个元素时崩溃
- 从数组比较2个字符串时,程序崩溃
- C++ 尝试向类内的数组(或向量)添加值时程序崩溃
- 内存相关崩溃:Cocos2d游戏中的三维数组
- 指针数组C++崩溃
- 超过120000个元素的数组崩溃
- c++ delete数组崩溃
- 使用2D c风格的数组崩溃