Mir unerklärliches Problem
-
Ich habe momentan ein Problem, dass ich so noch NIE hatte und mir momentan absolut nicht erklären kann. Dass hier ist der Konstruktor meiner Enumeration-Klasse:
Enumeration::Enumeration() { D3D = Direct3DCreate9(D3D_SDK_VERSION); if(!D3D) throw EnumerationException("Could not initialize Direct3D"); minFullscreenWidth = 640; minFullscreenHeight = 480; maxFullscreenWidth = 1600; maxFullscreenHeight = 1280; bool enum32BitResolutions = true; bool enum16BitResolutions = true; minDepthBits = 15; minStencilBits = 0; enumDepthBuffer = true; enumMixedVP = false; }
Wenn ich den Code im VS.NET als debug-Version compiliere & starte, klappt alles fehlerfrei. Wenn ich jedoch auf "release" umstelle (sowohl bei debug als auch bei release linke ich gegen d3d9.lib und dxerr9.lib) springt er nach der If-Anweisung SOFORT zum Ende des Konstruktors. Ich habe gerade (im releasemode)einen Debugpoint auf die 1. Zeile gesetzt, mit F10 geht er dann auf die if-Anweisung und wenn man dann nochmal F10 drückt, springt er sofort zu der schließenden geschweiften Klammer. Der Zeiger D3D ist NICHT Null, es wird also auch keine Exception geworfen. Wie kann das sein???
-
öhm, versuch doch mal die Variablen in der Initialisierungsliste zu initialisieren. Vielleicht geht es damit. Kann auch sein, dass der VC++ aus den Zuweisungen im Release Modus eine Initialisierungsliste erzeugt, lass dir am besten mal ausgeben, was die Variablen nach dem Ctor-Aufruf für Werte besitzen.
Und wofür sind folgende Variablen? Die werden ja nicht benutzt
bool enum32BitResolutions = true; bool enum16BitResolutions = true;
Ansonsten solltest du bitte bessere Topics benutzen
wmfrs
-
kingruedi schrieb:
Und wofür sind folgende Variablen? Die werden ja nicht benutzt
bool enum32BitResolutions = true; bool enum16BitResolutions = true;
Höh?? In seinem Codebeispiel wird doch KEINE der Variablen schon genutzt (ausser halt initialisiert)...
-
Argh. Das Problem war, dass ich im Std-Ctor nicht die Member enumXXBitResolutions sondern lok. Variablen mit dem selben Namen initialisiert habe. Habt ihr ja auch schon bemerkt *g
@kingruedi: Zum Titel: Ich weiß, ich wollte nur einen besonders reißerischen Titel, das möglichst viele reinschauen. Ich gelobe Besserung
Dass er im Release-Modus Definitionen u. Zuweisungen wie int i = 3 überspringt scheint normal zu sein. Man lernt nie aus...
-
Im Release Modus wird (ohh Wunder!) optimiert. Dazu werden z.b. Befehle in der Reihenfolge vertauscht oder Variablen in Register getan. Das wären schon zwei Gründe, warum du dann sowas nicht mehr "normal" durchsteppen kannst.
Bye, TGGC \-/
-
Sgt. Nukem schrieb:
kingruedi schrieb:
Und wofür sind folgende Variablen? Die werden ja nicht benutzt
bool enum32BitResolutions = true; bool enum16BitResolutions = true;
Höh?? In seinem Codebeispiel wird doch KEINE der Variablen schon genutzt (ausser halt initialisiert)...
*autsch* *klatsch* - Jetzt merk' ich's auch!
Die (falsche) Syntaxhervorhebung sollte man mal anpassen...
Ich bin verwirrt...