Komisches Verhalten



  • Wenn ich einer Variablen etwas zuweise (a= 22) und beim debuggen an dieser Stelle als Ergebnis für a=0 bekomme, was kann da schief gehen?
    Dieser Variablen wird nur an einer Stelle etwas zugewiesen. Leider betrifft es auch alle anderen Variablen. Sie sind alle 0, egal was ich ihnen übergebe.
    Dieses Problem tritt in einer Dll auf, die ich dynamisch Lade.
    Der Dll werden bei Aufruf 2 Zahlen und 2 Zeiger auf ein Arrayfeld übergeben.
    Die Arraygröße habe ich schon überprüft, die stimmt. Hatte sie schon zum testen stark vergrößert.

    Kann mir jemand helfen.

    Oli



  • Optimierungen ausschalten.



  • Hatte ich schon.

    Was soll das bringen?

    Oli



  • Würde auf einen wilden Pointer tippen, also auf einen, der vor dem Speicherzugriff nicht initialisiert wird.



  • Hallo.

    Also der code für den Dll-Aufruf sieht in etwa wie folgend aus:

    theApp.pIn = new long (50);
    theApp.pOut = new long (50);
    
    FunktionZurFuellung()
    
    rechnung(3,theApp.pIn, theApp.pOut, 6)
    
    delete[] theApp.pIn;
    theApp.pIn= NULL; 
    delete[] theApp.pOut;
    theApp.pOut= NULL;
    

    Der Inhalt von theApp.In und theApp.pOut, habe ich überprüft beim debuggen.
    Es stehen die richtigen Werte drin.

    Der Fehler tritt unter EVC++ 4.0 auf unter VC++ 6.0 funktioniert es.

    Oli



  • Oli_1977 schrieb:

    Also der code für den Dll-Aufruf sieht in etwa wie folgend aus:

    theApp.pIn = new long (50);
    theApp.pOut = new long (50);
    [...]
    

    Dir ist schon klar, dass hier keine Arrays allokiert werden sondern jeweils nur *ein* long der mit dem Wert 50 initialisiert wird?

    Ein Array allokiert man mit [].

    [cpp]
    theApp.pIn = new long [50];
    theApp.pOut = new long [50];
    [/cpp]



  • Ja, sorry. Ist ein Schreibfehler.
    Wenn man nicht Kopiert und einfügt sondern neu schribt.
    Im Quellcode steht natürlich [].

    Oli



  • Oli_1977 schrieb:

    Was soll das bringen?

    Der Debugger zeigt oft Blödsinn an, wenn man mit Optimierung compiliert hat.



  • Ringding schrieb:

    Oli_1977 schrieb:

    Was soll das bringen?

    Der Debugger zeigt oft Blödsinn an, wenn man mit Optimierung compiliert hat.

    Kann man so nicht sagen. Optimierung und Debug-Infos schliessen sich normalerweise aus. Dh wenn man optimiert compiliert, werden keine Debug Infos erzeugt und compiliert man mit Debug Infos, werden, wenn überhaupt, nur spärlich Optimierungen vorgenommen. Mit solchen Debug Infos hat man beim Debuggen mehr "Komfort", dh man kann direkt durch den Quellcode gehen. Ohne Debug Infos muss man sich hingegen mit dem Assembler Code zufrieden geben.

    Meine Vermutung für den Fehler ist, dass EVC++ 4.0 (was immer das auch ist), mit dynamisch geladenen DLL's nicht klarkommt. Lass dir mal die Werte zur Laufzeit ausgeben (Konsole oder Datei). Solange das stimmt, würd ich mir keine Sorge machen, was der Debugger anzeigt.



  • Hallo.

    Ich laß mir die Werte ja in eine Datei ausgeben. Leider stimmen die Werte ja nicht. Das ist ja das Problem.

    Oli



  • groovemaster2002 schrieb:

    Ringding schrieb:

    Oli_1977 schrieb:

    Was soll das bringen?

    Der Debugger zeigt oft Blödsinn an, wenn man mit Optimierung compiliert hat.

    Optimierung und Debug-Infos schliessen sich normalerweise aus.

    Kommt auf den Compiler an.



  • Mein Programmiertool ist in diesem Fall das Embedded Visual Studio 4.0

    Oli



  • Oli_1977 schrieb:

    Ich laß mir die Werte ja in eine Datei ausgeben. Leider stimmen die Werte ja nicht. Das ist ja das Problem.

    Also irgendwie wird die Sache für mich immer verwirrender.
    Vielleicht solltest du nochmal ganz konkret erklären, wie sich der Fehler äussert bzw. wo genau falsche Werte auftreten.



  • Hallo.

    Also. Beim, wenn ich die Dll debugge erhalte ich die beschriebenen Symtome. Den Variablen wird ein Wert zugewiesen, aber wenn ich mit dem Mauszeigen drauf bin haben sie den Wert 0 ( auch in der Überwachung). Irgendwann erhalte ich dann beim debuggen die Fehlermeldung " First-chance exception in test.exe (rechnung.dll): 0xC0000005: Access Violation.

    Lasse ich die Dll einfach durchlaufen (ohne debuggen), erhalte ich falsche Ergebnisse. Ich bekomme aber auch keine Fehlermeldung.

    Dieser Fehler tritt nur unter Windows CE auf. Ich habe die gleiche Software auch auf meinem Laptop laufen und dort funktioniert es fehlerfrei. Den Inhalt ( die Formel ) habe ich aus der Laptop-Dll heraus kopiert. Es ließ sich ohne Fehlermeldungen und ohne Warnungen compilieren.

    Hoffe ich konnet jetzt noch mal alles zusammen fassen.

    Oli



  • Kann es sein, dass du unter CE WinAPI Funktionen benutzt, die CE nicht unterstützt?

    Oli_1977 schrieb:

    Den Variablen wird ein Wert zugewiesen, aber wenn ich mit dem Mauszeigen drauf bin haben sie den Wert 0 ( auch in der Überwachung).

    Das kann ich mir nicht so richtig erklären bzw nachvollziehen. Am besten du postest mal den kompletten Code, der dafür relevant ist. Also vom Zuweisen bis zu dem Punkt, wo du überwachst.


Log in to reply