Anfängerfehler



  • Gut danke, das klingt einleuchtend, dann fang ich mal an.

    MfG
    Scarabol



  • Hallo,

    ich hab eine Header Datei math.h mit Mathefunktionen. Die Funktionen werden sowohl in der user.h als auch in der gui.h gebraucht.

    user.h

    #include "math.h"
    

    gui.h

    // Was muss ich in dieser Datei noch includen, damit ich die Funktionen aus math.h und aus user.h benutzen kann?
    // reicht hier:
    #include "user.h"
    // weil in user.h ja bereits die math.h eingefügt wurde oder muss ich das so aufrufen
    #include "math.h"
    #include "user.h"
    

    MfG
    Scarabol



  • Scarabol schrieb:

    Hallo,

    ich hab eine Header Datei math.h mit Mathefunktionen. Die Funktionen werden sowohl in der user.h als auch in der gui.h gebraucht.

    user.h

    #include "math.h"
    

    gui.h

    // Was muss ich in dieser Datei noch includen, damit ich die Funktionen aus math.h und aus user.h benutzen kann?
    // reicht hier:
    #include "user.h"
    // weil in user.h ja bereits die math.h eingefügt wurde oder muss ich das so aufrufen
    #include "math.h"
    #include "user.h"
    

    MfG
    Scarabol

    Hast du's mal ausprobiert? Es sollte laufen, wenn du nur user.h includierst. Du musst also math.h nicht noch einmal einbinden.

    Allerdings halte ich das für keine so gute Idee. Falls du irgend wann einmal math.h in user.h nicht mehr brauchst und es rausschmeißt, kriegst du in allen möglichen, nicht vorhersehbaren Dateien Fehler.

    Man sollte immer die Dateien includen, die man auch braucht. In sofern ist dein zweites Beispiel besser.

    Stefan.



  • Gut, danke.

    Noch ein Problem wenn ich mein Projekt starte läuft alles wunderbar. Erst wenn ich das Programm beende bekomme ich einen illegalen Speicherzugriff angezeigt.
    Woran liegt das?

    MfG
    Scarabol



  • Scarabol schrieb:

    Woran liegt das?

    Meine Glaskugel ist zerbrochen, und was DEIN Debugger als Antworten gibt, können wir nicht ahnen.



  • Ausgabe

    Eine Ausnahme (erste Chance) bei 0x0040cd43 in starfighter_online.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000009.
    Unbehandelte Ausnahme bei 0x0040cd43 in starfighter_online.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000009.
    

    Aufrufbrowser

    starfighter_online.exe!irr::core::irrAllocator<char>::deallocate(char * ptr=0x0041e6e8)  Zeile 41 + 0xc Bytes	C++
    	starfighter_online.exe!irr::core::string<char,irr::core::irrAllocator<char> >::~string<char,irr::core::irrAllocator<char> >()  Zeile 191	C++
     	starfighter_online.exe!irr::scene::quake3::`dynamic atexit destructor for 'irrEmptyStringc''()  + 0xd Bytes	C++
    

    irrAllocator.h (gehört zu Irrlicht, 3D Engine)

    //! Deallocate memory for an array of objects
    	void deallocate(T* ptr)
    	{
    		internal_delete(ptr); // <<<<<< hier Error
    	}
    

    MfG
    Scarabol



  • Da wird anscheinend Speicher freigegeben, welcher bereits freigegeben worden ist oder einfach auf nichts sinnvolles zeigt.

    Sprich der Aufrufkontext der Funktion ist fehlerhaft. Ich würde mal darauf tippen, dass du da die deallokation in einem Destruktor hast und du dann das Objekt kopierst (sprich auch der Zeiger) wird kopiert und du hast dann 2x eine deallokation auf den gleichen Speicherbereich. Das ist ein üblicher Fehler.

    Ansonsten zeig mal die (relevante) Umgebung, wo du die Funktion aufrufst. (und der Fehler passiert).



  • drakon schrieb:

    Ansonsten zeig mal die (relevante) Umgebung, wo du die Funktion aufrufst. (und der Fehler passiert).

    Der Debugger springt direkt in die Header Datei, ich weiß also nicht wo im Programm der Fehler passiert und die Funktion wird einige Male verwendet...

    MfG
    Scarabol



  • der Debugger wird vermutlich an die Stelle springen wo die Exception auftritt - und im Stacktrace solltest du dann sehen von wo aus deinem Programm der Ablauf an die Stelle gelangt ist. Irgendwo wird eine von dir geschrieben Funktion im Stacktrace stehen und davor setzt du beim nächsten Debugdurchlauf am besten mal einen Breakpoint und schaust dir die Werte an, ob sie gut sind.



  • Wie finde ich den "Stacktrace" bei Visual C++ 2008 + SP1 ?

    MfG
    Scarabol



  • Das ding heißt dort Callstack oder so ähnlich - auf deutsch weiß ichs ehrlich gesagt nicht - "aufrufreihenfolge" oder was öhnliches vielleicht? Wenn du beim Debuggen bist müsstest du das Fenster mit Alt+7 öffnen können.



  • view -> other windows -> call browser
    heißt es im englischen - obwohl ich auch immer dachte, dass es call stack hieß : D

    hat bei mir keinen short cut
    (MSVC 2008 prof.)

    bb



  • pumuckl schrieb:

    Das ding heißt dort Callstack oder so ähnlich - auf deutsch weiß ichs ehrlich gesagt nicht

    "Stapelrahmen" :xmas2:



  • Hier mal ein Screeni irgendwas mach ich doch falsch :?

    http://img163.imageshack.us/img163/7438/aufproblem.th.png

    Kann man in diesem Forum eigentlich Bilder posten?

    MfG
    Scarabol



  • Rechts unten. "Aufrufliste".



  • ok, hab ich gesehen aber wie kann ich in den zugehörigen Quellcode springen um den Breakpoint zu setzen? Wenn ich die Zeile anklicke kommt er mir nur mit Dissassembly oder sowas...

    MfG
    Scarabol



  • ?
    Also wenn ich bei mir VS08 Prof. da Doppelklick mache, dann springt er mir in den Code..



  • "Für die aktuelle Position ist kein Quellcode verfügbar!"

    Stimmt so gesehen auch, weil sich das im vorkompilierten Lib der Grafikengine abspielen sollte...

    MfG
    Scarabol



  • ^^
    Na klar. Wenn kein Code vorhanden ist, kann er auch nicht reinspringen. 😉
    Wäre ja zu schön, wenn VS da einfach mal eben aus Binarys C++ Code machen könnte. :p



  • Und was mach ich jetzt :?

    MfG
    Scarabol


Anmelden zum Antworten