Hallo!
Ich habe das Beispiel aus dem C-Tutorial (Kap. 12.2, Dynamische Speicherzuweisung), mit dem man "theoretisch beliebig viel Text einlesen kann", kompiliert und dann laufen lassen.
Leider stürzt mir das Programm jedes Mal ab, wenn ich die Eingabe-Taste drücke.
Liegt es am Source-Code oder an meinem Compiler?
LG Heli
Edit by Xin: Betreff um 'tutorials.at:' erweitert
tutorials.at: Tutorial-Beispiel stürzt ab
-
- Beiträge: 16
- Registriert: Di Apr 27, 2010 3:47 pm
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: tutorials.at: Tutorial-Beispiel stürzt ab
Wenn Du Dich auf ein Tutorial außerhalb von proggen.org beziehst, dann gib uns bitte wenigstens einen Hinweis darauf, auf welches Tutorial Du Dich beziehst. Die Inhalte von tutorials.at gehören nicht zu proggen.org!
Auf welches Beispiel beziehst Du Dich genau?
Edit: Ich habe jetzt mal alle drei Beispiele kompiliert und keines stürzte ab. Was genau machst Du?
Dennoch sind alle drei Beispiele falsch.
Auf welches Beispiel beziehst Du Dich genau?
Edit: Ich habe jetzt mal alle drei Beispiele kompiliert und keines stürzte ab. Was genau machst Du?
Dennoch sind alle drei Beispiele falsch.
Nicht kann - muss!tutorials.at hat geschrieben:Nicht mehr benötigter Speicher kann mit free() wieder freigegeben werden. Z.B.:
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: tutorials.at: Tutorial-Beispiel stürzt ab
Ich hab das Beispiel welches du vermutlich meinst auch ausprobiert und bekomme ebenfalls einen Fehler. Der Ursache dafür liegt in folgender Funktion:
Das Problem ist hier der Aufruf von 'strncpy (zeile, buffer, MAX);' da hierbei immer 'MAX' Zeichen in 'zeile' geschrieben werden, obwohl vorher sehr wahrscheinlich in der Zeile darüber weniger Speicher als 'MAX' dafür reserviert worden ist. Dadurch werden Speicherbereich mit Nullen überschrieben, in denen man eigentlich nichts zu suchen hat. In diesem Bereich liegen zufällig , zumindest bei mir Daten der Standardbibliothek zur Speicherverwaltung, die dadurch überschrieben werden und dadurch beim nächsten Aufruf von 'malloc' zu einem Fehler führen.
Code: Alles auswählen
#define MAX 80
char *getLine()
{
char buffer[MAX], *zeile = 0;
int speicherbedarf = 0;
/* eine Zeile einlesen, hoechstens MAX Zeichen */
fgets(buffer, MAX, stdin);
/* hier Ende, wenn die Zeile nur aus einem Punkt besteht */
if ( (buffer[0]=='.') && ((buffer[1]=='\n') || (buffer[1]=='\r')) )
return NULL; // Ende signalisieren
/* sonst ... (kein else-Block noetig!) */
/* Speicherbedarf des Strings ermitteln */
speicherbedarf = strlen(buffer) + 1; /* Stringlaenge + 1 Zeichen fuer \0 am Ende */
/* Speicher reservieren */
zeile = (char *) malloc (speicherbedarf); /* laenge entspricht dem Speicherbedarf in Bytes! */
/* Buffer kopieren */
strncpy (zeile, buffer, MAX);
/* Zeiger zurueckliefern */
return zeile;
}
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at