Anfängerfehler
-
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
ScarabolHast 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ß : Dhat 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
-
Naja. Das was man da halt tut. Schrittweise debuggen und schauen, wo der Fehler passiert.
Mach dir vor allem mal Gedanken über die Dinge, welche ich auf Seite 1 gepostet habe!