Problem mit Pointern
-
Hi,
hab jetz schon seit recht langer Zeit ein dickes Problem mit einer meiner Klassen.
Wenn ich diese Klasse "MD3Character" normal erstelle und benutze, also so:
MD3Character cha;
funktioniert alles einwandfrei. Wenn ich es allerdings so versuche:
MD3Character* cha;
cha = new MD3Character();
oder so:
MD3Character* cha;
cha = new MD3Character[10];
funktioniert es im Debug Modus auch einwandfrei. Beim Release Modus kratzt es allerdings bei folgender Zeile mit einer Access Violation ab:
v1.pos.x = m->Vertices[curr_offset_vertex + vertidx].Vec[0] * 0.015625f;
wahrscheinlich hat diese Zeile selbst wenig mit dem Problem zu tun, aber egal.Wenn ich euch den genaueren Ablauf des Programms erklären soll oder irgendwelche funktionen dieser Klasse posten soll, sagt es. Erstma hoffe ich, dass das n ganz simpler fehler ist, der nur mir nicht bekannt ist

-
Hallo,
folgendes klappt auf jeden Fall:
MD3Character* cha = new MD3Character; //Instanz vom Typ MD3Character dynamisch allokieren delete cha; //...freigeben //oder so: MD3Character* arr_cha = new MD3Character[10]; //10 Instanzen vom Typ MD3Character dynamisch allokieren delete [] cha; //...freigebenJetzt zu der eigentlich Interessanten Zeile:
v1.pos.x = m->Vertices[curr_offset_vertex + vertidx].Vec[0] * 0.015625f;1. Was ist v1 (mitsamt pos.x)?
2. Was ist m? Ok, es ist ein Zeiger, aber auf was?
3. Wird durch folgenden Ausdruck 'curr_offset_vertex + vertidx' ein zu hoher Index berechnet, der zu der Access Violation führen könnte?
4. Was gibt das: '.Vec[0] * 0.015625f;' ??Ein allgemeiner Ratschlag: Es ist nicht schlimm, 'etwas unglücklich formuliete Berechnungen' mit Zwischenergebnissen übersichtlicher (und meistens auch korrekt) zu gestalten. Der Compiler macht diese Zwischenberechnungen sowieso, also ist es grad wurscht. Denk dran, das Programm wird nicht schneller, nur weil du Berechnungen so zusammenquetschst, um 10 Zeilen zu sparen. Aber auf jeden Fall wird der Code besser zu lesen sein, und die Fehlersuche erleichtern

MfG
GPC
-
Ja das komische ist ja, dass diese Zeile und das gesamte Programm einwandfrei funktioniert, wenn ich cha nicht als pointer benutze.
Deswegen kann es doch eigentlich garnicht an dieser Zeile liegen oder? Ich mein, hier sollte sich ja nichts ändern, nur weil die Klasse als Pointer benutzt wird (ka wie man das richtig sagt)
-
keiner ne lösung zu dem problem? Kann auf Wunsch auch gerne das Projekt jemandem schicken, wenn er sich das dann angucken kann. (Man bräuchte das DX Sdk)
Ok Problem gefunden:
Ein paar Variablen waren nicht initialisiert