Zugriffsverletzungen bei Variabelen in Klassen
-
Ich habe eine Kasse definiert mit einigen Variablen und Funktionen (gekürzte Fassung):
class TNetwork { public: //Grundeinstellungen int Port; //Port des Servers char IP[100]; //IP der Servers //Eigenes Männchen char Username[100]; //Dein Username bool __fastcall Connect (void); bool __fastcall Login (void); void __fastcall NoBlocking (void); void __fastcall SendPos (int XPos, int YPos); void __fastcall SendMove (int XPos, int YPos, bool Richtung[4]); void __fastcall SendChatText (char text[256]); void __fastcall NetworkCheck (void); __fastcall TNetwork (char PortIn[100], char IPIn[100], char UsernameIn[100]); };In der cpp habe ich den Code für alle Funktionen stehen. Allerdings ist jetzt erst mal bloß der Konstruktor wichtig.
__fastcall TNetwork::TNetwork (char PortIn[100], char IPIn[100], char UsernameIn[100]) { Port = 1111; //<------ hier kommt der Fehler sscanf (IPIn, "%s", IP); sscanf (UsernameIn, "%s", Username); }In main() lege ich ein Objekt von der Klasse an. Dies hat bis jetzt immer gut funktioniert, aber letzten ließ sich zwar das Programm kompilieren, aber beim ausführen blieb er bei der gekennzeichneten Zeile stehen und gab mir diesen Fehler:
---------------------------
Warning
---------------------------
Eine Zugriffsverletzung (Segmentation Fault) trat in Ihrem Programm auf.
---------------------------
OK
---------------------------Früher hat es aber funktioniert, und in der letzten Zeit habe ich dort nichts verändert. Ich arbeite mit Dev-Cpp wenn das hilf.
Kann mir jemand sagen was falsch ist?
-
Segfault entsteht durch sowas:
Klasse* k; // uninitialisierter Pointer k->doSomething(); // hier SegfaultOder wenn ein Objekt schon gelösch wurde, aber doch nochmal drauf zugegriffen wird.
Wo und wie (samt Backtrace) verrät dir dann dein Debugger. Das ist ein Programm und nicht der Nerd um die Ecke

-
Ich finde meinen Fehler einfach nicht. So sieht meine main.cpp aus (stark gekürzte Fassung, aber der Rest hat damit nichts zutun):
#include <stdio.h> #include "network.h" TNetwork *Network; using namespace std; int main(int argc, char *argv[]) { Network = new TNetwork(Porte, IPe, UserNamee); //... }Da kann ja nicht viel falsch sein, oder?
-----------------------------------------------------------------------
Habe den Fehler gefunden. Ich habe irgendetwas an den Kompilereinstellungen verändert. In der .dev Datei stand bei Kompilereinstellungen was falsches. Hab ich durch vergleichen mit alten Sicherheitskopien herausgefunden.
Falsch:
[Project]
CompilerSettings=0000000000000101000000
Richtig:
[Project]
CompilerSettings=0000000000000001000000Kann mir irgendjemand verraten wie ich das im Menü von Dev-Cpp hervorgerufen habe?
-
debugger...
-
Ich habe bis jetzt mit dem Debugger blos selten gearbeitet. Wenn du also ein gutes Tutorial (am besten aud Deutsch) zum Debugger von Dev-cpp kennst, würde ich mich freuhen.
Mich würde aber auch sehr interresieren, wo ich etwas verstellt habe, dass diese 1 statt 0 in der .dev erscheint ist.
-
sry, dev-c++ wird hier nicht mehr supportet (zumindest nicht von mir - hab ich aber ohnehin nie verwendet)... ist veraltet und hat sehr viele bugs - besorg dir lieber visual studio express oder so was in der richtung - wenn du dann noch fragen hast.
falls das (aus uneinsichtigkeit oder wieso auch immer) nicht geht:das sagt google zu "debugger dev c++"
bb