Ich bin über ein seltsames Problem gestolpert, in dem ich nicht verstehen kann. Ich bin kein Experte bei C/C++, also ertragen Sie mit mir. Ich habe eine NSC-Klasse, die von einer Player-Klasse abgeleitet ist, die von einer Sprite-Klasse abgeleitet ist. Die Sprite-Klasse enthält eine setupAnimation-Funktion, die ein Array von Floats mit Koordinaten auf der Textur zuweist, jedes Element des Arrays bezieht sich auf ein Animations-Frame. Das ist alles gut und funktioniert gut.Speicherzuteilung Crash
Ein Problem tritt jedoch auf, wenn ich der NSC-Klasse ein Array von Zeigern hinzufüge. Diese Zeiger sind vom Typ "Item". Wenn ich dieses Array hinzufüge, funktioniert es gut, wenn das Array klein ist (10 war die Größe, die ich getestet habe), wird aber abstürzen, wenn das Float-Array für zuvor erwähnte Texturkoordinaten zugewiesen wird, wenn die Größe etwas größer ist (100 war die Größe I) geprüft).
Hier sind einige Code-Fragmente zeigt das Material die ich oben erwähnt:
der Item-Klasse Array von Zeigern:
engItem* itsLoot[100]; // With 100 here, the crash occurs as shown below
Die Texturkoordinaten und deren Zuordnung Pendants:
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];
Diese Code-Fragment ist die Basis jeder Klasse, die von der Sprite-Klasse abgeleitet ist. Was ich nicht verstehen kann ist, warum ein extra 90 Zeiger ein Problem während der Float-Zuweisung verursacht. Nur ein bisschen Software-Informationen mit diesen
OS zu gehen: Windows Vista 32-bit, Compiler: Visual C++ 9.0, Programmlaufzeit Speicher: ~ 17,600k, Systemspeicher: ~ 2GB
In diesem Sinne, Ich kann nicht sehen, dass Speicher leer ist, und ich kann nicht nachvollziehen, wie ein Array von Zeigern dazu führt, dass die Zuweisung fehlschlägt. Wie erwähnt, funktioniert die Zuweisung in allen anderen Klassen gut, die von Sprite abgeleitet sind (sowie von Sprite selbst), aber sobald dieser Zeigerbereich der NPC-Klasse hinzugefügt wird, weist der NPC dieses Strukturdaten-Fließkommarray nicht mehr zu, ohne abzustürzen.
Was ist der Absturz? Das heißt, was ist der Callstack und Ausnahmecode oder Assert, wenn verfügbar? – MSN