我偶然发现了一个我无法理解的奇怪问题。我不是 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 将不再分配此纹理数据浮点数组而不会崩溃。