Hallo allerseits,
ich habe ein seltsames problem mit einem C++ Programm, was mich fast zur Verzweiflung bringt.
Also: ich habe eine Klasse mit zwei Methoden ungefähr so:
class myClass {
publuc: bool Init(); protected: bool DateiLaden( char *dateiname ); }
die Methode "DateiLaden" wird aus der Methode "Init()" folgendermaßen aufgerufen. "this->DateiLaden( "irgeideinedatei" );". Das funktioniert auch alles prima. Wenn ich allerdings den Rückgabe wert von DateiLaden() mittels
bool ergebnis = this->DateiLaden( "irgendeinedatei" );
abfragen will endet das immer mit einem Segmentation fault. Mittels Debugger habe ich rausgefunden, daß der segfault immer in der Zeile nach "return true;" auftritt( dort ist aber nur eine Klammer drin ( } )). Dasselbe passiert auch mit der Methode Init(), nur dort passiert immer, egal ob ich den Rückgabewert abfrage oder nicht.
hat jemand eine Ahnung, woran das liegen könnte??????
Viele Grüße und einen guten Rutsch.....Michael es immer.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Sunday 30 December 2001 17:28, Michael Grützner wrote:
Hallo allerseits,
ich habe ein seltsames problem mit einem C++ Programm, was mich fast zur Verzweiflung bringt.
Also: ich habe eine Klasse mit zwei Methoden ungefähr so:
class myClass {
publuc:
das heisst public
bool Init();
Was soll bitte Init sein? Konstruktor? Dann muss es myClass heissen.
protected: bool DateiLaden( char *dateiname ); }
Semikolon fehlt. Hat Dir der Compiler sicher auch gesagt. ;-)
Uebrigens ist es ganz schlechter Stil zwei Sprachen zu mischen!! Das versteht ausserhalb Dtl.s keiner mehr.
die Methode "DateiLaden" wird aus der Methode "Init()" folgendermaßen aufgerufen. "this->DateiLaden( "irgeideinedatei" );".
this-> kannst (und solltest!) Du auch weglassen, ist ja nicht PHP.
Das funktioniert auch alles prima. Wenn ich allerdings den Rückgabe wert von DateiLaden() mittels
bool ergebnis = this->DateiLaden( "irgendeinedatei" );
abfragen will endet das immer mit einem Segmentation fault. Mittels Debugger habe ich rausgefunden, daß der segfault immer in der Zeile nach "return true;" auftritt( dort ist aber nur eine Klammer drin ( } )).
Aha, klingt nach einem Buffer overflow. Pruef mal, ob die groessen saemtlicher Puffer stimmen und Du nicht (auch nur 1 byte) drueberschreibst. Wahrscheinlich erwischst Du auf die Weise den Frame Pointer und der Rechner springt an eine Stelle, wo einfach nix ist.
Dasselbe passiert auch mit der Methode Init(), nur dort passiert immer, egal ob ich den Rückgabewert abfrage oder nicht.
hat jemand eine Ahnung, woran das liegen könnte??????
hmm?
Schick mal den ganzen Source dieser Klasse und wie Du sie verwendest.
Konrad
- -- BOFH excuse #208:
Your mail is being routed through Germany ... and they're censoring us.
On Sun, Dec 30, 2001 at 05:28:28PM +0100, Michael Grützner wrote:
class myClass { publuc: bool Init(); protected: bool DateiLaden( char *dateiname ); }
class myClass { public: bool Init(); protected: bool DateiLaden( char *dateiname ); };
abfragen will endet das immer mit einem Segmentation fault. Mittels Debugger habe ich rausgefunden, daß der segfault immer in der Zeile nach "return true;" auftritt( dort ist aber nur eine Klammer drin ( } )).
Ich denke, das hängt sehr stark davon ab, was Du machst mit dateiname. Kannst Du das mal publizieren? Was also ist die Definition Deiner myClass::DateiLaden(char* dateiname) -- Funktion?
Funktioniert alles auch noch, wenn Du
myClass::DateiLaden(const char* dateiname) ~~~~
verwendest?
Heiko
lug-dd@mailman.schlittermann.de