PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C merkwürdiger Fehler mit fgets


AtTheDriveIn
2008-10-22, 22:54:48
Hi

Folgender Codeauschnitt;



char *eingabe;
....
fgets(eingabe,80,stdin);
...

Klappt auf meinem PC problemlos, aber verursacht auf meinem Laptop ein Segmentation fault. Hat jemand eine Idee warum? Also nonC-profi ist das echt zu hoch für mich. :)

Superguppy
2008-10-22, 23:05:17
Hast du eingabe auch mit malloc() Speicher zugewiesen? Wenn nicht, ists klar!

AtTheDriveIn
2008-10-23, 00:10:24
hmm... ja sollte ich machen, aber warum funktioniert es auf einem Computer einwandfrei, auf dem anderen nicht?

_Gast
2008-10-23, 08:35:56
...aber warum funktioniert es auf einem Computer einwandfrei, auf dem anderen nicht?Durchchar *eingabe;sagst du dem Computer lediglich, dass du eine Zeichenkette verarbeiten willst, aber du reservierst keinen Speicherplatz dafür (Deklaration, Definition). Ist der Speicherplatz auf dem Computer zufällig frei wenn du ihn benutzt, funktioniert das. Ist der Speicher aber belegt, gibt es eben einen Fehler.

AtTheDriveIn
2008-10-23, 23:39:38
Durchchar *eingabe;sagst du dem Computer lediglich, dass du eine Zeichenkette verarbeiten willst, aber du reservierst keinen Speicherplatz dafür (Deklaration, Definition). Ist der Speicherplatz auf dem Computer zufällig frei wenn du ihn benutzt, funktioniert das. Ist der Speicher aber belegt, gibt es eben einen Fehler.

Ah ok, dann war es wohl nur Zufall das es auf einem PC funktionierte. :)

danke für die Erklärungen

The_Invisible
2008-10-24, 09:38:50
warum benutzt du nicht zb "char buf[100]" ?

ansonsten musst eben, wie schon gesagt, speicher reservieren und wichtig, auch wieder freigeben.

mfg

Superguppy
2008-10-24, 13:00:00
warum benutzt du nicht zb "char buf[100]" ?
Naja, da Stackspeicher beschränkt vorhanden ist, ist es grundsätzlich keine dumme Idee, einen Buffer mittels malloc() anzulegen. Je nach Programm halt. Aber wenn der Threadersteller in C nicht so sattelfest ist, ist ein char-Array sicher weit angenehmer handzuhaben.

_Gast
2008-10-24, 13:46:31
Ah ok, dann war es wohl nur Zufall das es auf einem PC funktionierte.Richtig. Das ist auch der Grund, warum viele Programmfehler erst spät entdeckt werden und scheinbar unerklärlich sind, weil sie auf vielen anderen Systemen ja einwandfrei funktionieren. Sun mit Java und Microsoft mit .net versuchen, eine Programmierumgebung zu schaffen, in der das nicht mehr so leicht passieren kann.

Coda
2008-10-24, 13:53:40
hmm... ja sollte ich machen, aber warum funktioniert es auf einem Computer einwandfrei, auf dem anderen nicht?
Weil es undefiniert ist.