minicrispie: Segmentation Fault in C

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

--
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
  1. 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

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  2. 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

    --
    Mein "Weblog" [RSS]
    Using XSLT to create JSON output (Saxon-B 9.0 for Java)
    »I don't believe you can call yourself a web developer until you've built an app that uses hyperlinks for deletion and have all your data deleted by a search bot.«
                -- Kommentar bei TDWTF
    1. 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)