【发布时间】:2010-11-14 08:40:39
【问题描述】:
我偶然发现了一个我无法理解的奇怪问题。我不是 C/C++ 方面的专家,所以请耐心等待。我有一个 NPC 类,它派生自一个 Player 类,它派生自 Sprite 类。 sprite 类包含一个 setupAnimation 函数,它分配一个浮点数组,其中包含纹理上的坐标,数组的每个元素都指一帧动画。这一切都很好,工作正常。
但是,当我向 NPC 类添加一个指针数组时,会出现问题。这些指针属于 Item 类类型。当我添加这个数组时,如果数组很小(10 是我测试的大小),它工作正常,但是如果大小有点大(100 是我测试的大小),在为前面提到的纹理坐标分配浮点数组时会崩溃测试)。
下面是一些代码片段,展示了我上面提到的材料:
Item 类指针数组:
engItem* itsLoot[100]; // With 100 here, the crash occurs as shown below
纹理坐标及其对应的分配:
GLfloat* itsTextureXData;
GLfloat* itsTextureYData;
...
animationFile >> frameCount; // Tested, the value is correct
engDeallocate(getTextureXData(), true); // Works fine
itsTextureXData = new GLfloat[frameCount]; // This is where the crash occurs
engDeallocate(getTextureYData(), true);
itsTextureYData = new GLfloat[frameCount];
这段代码是从 Sprite 类派生的每个类的基础。我无法理解的是为什么额外的 90 个指针会在浮点分配期间导致问题。只需一点软件信息就可以了
操作系统:Windows Vista 32 位,编译器:Visual C++ 9.0,程序运行时内存:~17,600k,系统内存:~2GB
考虑到这一点,我看不到它正在耗尽内存,并且我无法了解指针数组如何导致分配失败。如前所述,分配在从 Sprite 派生的所有其他类(以及 Sprite 本身)中工作正常,但是一旦将此指针数组添加到 NPC 类,NPC 将不再分配此纹理数据浮点数组而不会崩溃。
【问题讨论】:
-
什么是崩溃?也就是说,调用堆栈和异常代码或断言是什么?
标签: c++ memory crash pointers new-operator