Segmentation Fault in C
minicrispie
- programmiertechnik
Hallo,
ich hab mal ein kleines Programm geschrieben, womit ich Strings und deren sämtliche Eigenschaften in C nutzen kann( noch nicht fertig ). Nun habe ich bei der Eingabe des Strings ein Problem:
Wenn ich den Benutzernamen eingeben will, dann strürzt das Programm beim zweiten Buchstaben ab.
DevC++ liefert mir ein Segmentation Fault. Was hat das zu bedeuten? Bin ich neuerdings zu Blöd, um Strings zu beschreiben?
Hier einmal der Code.
Ich hoffe, Ihr könnt mir helfen.
MfG. Christoph Ludwig
Yerf!
DevC++ liefert mir ein Segmentation Fault. Was hat das zu bedeuten? Bin ich neuerdings zu Blöd, um Strings zu beschreiben?
Hm, meine C-Kenntnisse sind zwar etwas angestaubt, aber:
aus der Funtion: _string *_string_init( int n, int typ )
_string tmp; // lokale Variable vom Typ _string
return &tmp; // hier gibst du die Adresse auf diese lokale Variable zurück
...das kann eigentlich nicht gutgehen. Vermutlich willst du an der Stelle einen Zeiger auf _string und diesen direkt per return zurückgeben.
Gruß,
Harlequin
Hallo,
DevC++ liefert mir ein Segmentation Fault. Was hat das zu bedeuten?
Kurzes Überfliegen zeigt das erste Problem bereits in _string_init - Du gibst einen Zeiger auf eine Variable, die auf dem Stack liegt, zurück:
_string tmp;
// weiter unten
return &tmp;
Das kann natürlich nicht funktionieren. Du musst den Rückgabewert dann schon auf dem Stack anlegen, etwa so:
_string *tmp = (_string *) malloc (sizeof (_string));
tmp->... = ...;
return tmp;
Ferner: Wenn Du irgend einen Fehler auftriffst in der Funktion, dort aber bereits etwas per malloc() alloziert hast, was Du nicht zurückgeben willst, dann musst Du den bereits allozierten Speicher wieder freigeben, sonst hast Du ein Speicherleck und Dein Programm frisst mit der Zeit immer mehr und mehr Speicher.
Ob da noch weitere Probleme drin sind, weiß ich nicht.
Viele Grüße,
Christian
Hallo,
Das kann natürlich nicht funktionieren. Du musst den Rückgabewert dann schon auf dem Stack anlegen, etwa so:
_string *tmp = (_string *) malloc (sizeof (_string));
tmp->... = ...;
return tmp;
ahso. Daran hab ich überhaupt nicht gedacht. Danke!
MfG. Christoph Ludwig
--
Wo die Sprache aufhört, fängt die Musik an...
Selfcode: sh:) fo:) ch:° rl:( br:^ n4:} ie:{ mo:} va:) js:| de:] zu:) fl:( ss:| ls:~
Go to [this](http://pc-labor.hn.vc/Homepage/index.php)