Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

31.01.2012, 23:09

Beschädigter Heap

Hi, ich habe ein Problem mit dem Anfordern von neuem Speicher. Hier schnell mal ein paar Codeschnipsel.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
struct Face
{
unsigned short p1,p2,p3;
};

struct ObjMesh
{
....Face* face;
};

ObjMesh* Mesh;


Hier fordere ich das erste mal Speicher an. Das klappt auch noch reibungslos.

C-/C++-Quelltext

1
Mesh = new ObjMesh[nMesh];


Hier ist es schon weniger lustig

C-/C++-Quelltext

1
Mesh[0].face = new Face[9];


Denn folgende Fehlermeldung erscheint.

Zitat

Dies kann auf eine Beschädigung des Heaps zurückzuführen sein, die auf ein Problem in jhghghg.exe oder in einer der geladenen DLLs hinweist.

Ich weiss leider überhaupt nicht wo ich suchen muss, denn das selbe Vorgehen läuft ein paar Codezeilen drüber mit den "Vertices" problemlos ab -->

C-/C++-Quelltext

1
Mesh[MeshDex].vtx = new Vertex[Val + 1];

2

31.01.2012, 23:39

Die gezeigten Zeilen enthalten so noch keinen erkennbaren Fehler, aber in dem Zusammenhang, in dem sie verwendet werden sind sie evtl. falsch. Zeig mal mehr Quelltext. (Nicht unbedingt das ganze Programm, aber mal die Blöcke, die mit der Objekt Erstellung zu tun haben).
Lieber dumm fragen, als dumm bleiben!

3

31.01.2012, 23:42

Das heisst Mesh[0].face & vtx existieren überhaupt nicht? :S
Wenn ich dich richtig verstanden habe verstehe ich bloss noch nicht warum das ganze mit .vtx funktioniert.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

31.01.2012, 23:44

Ich hatte zu schnell geschrieben. Vergiss was ich geschrieben habe. ;)

5

31.01.2012, 23:46

Hhe kein Problem ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

31.01.2012, 23:51

Du schreibst wohl irgendwo über Arraygrenzen hinaus...

7

31.01.2012, 23:56

Beim Zugriff auf das erste Element?
Na, wie gesagt, mehr Code oder wir können alle nur haltlose Vermutungen anstellen.
Lieber dumm fragen, als dumm bleiben!

8

31.01.2012, 23:57

Sprechen wir hier von dem Zugriff auf das 0te Feld des Mesharrays oder von dem Anfordern des Speichers bei "face"?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

01.02.2012, 00:06

Dein Heap ist corrupted. Das bedeutet dass du irgendwo in Speicher geschrieben hast in den du nicht schreiben dürftest. Das bedeutet normalerweise dass du irgendwo Pointer verwendest die wo hinzeigen wo sie nicht hinzeigen sollten. Das ist üblicherweise eine Folge davon, dass du irgendwo hinter die Grenzen eines Arrays schreibst (z.B. weil du auf Element 9 eines Arrays das nur 9 Elemente hat schreibst). Das ist leider alles was ich dir mit der aktuellen Informationslage zu deinem Problem sagen kann...

10

01.02.2012, 00:07

Vielen Dank dot ich glaube das war aufklärend genug um mich auf intensive Fehlersuche zu begeben :)

Werbeanzeige