Fault access; read of address nach Ende des Programmes
Verfasst: Mi Nov 05, 2008 10:44 pm
Da ich in kürze Programmier-Test habe, wollte ich noch ein bisschen üben.
Das Programm soll prüfen, ob ein String ein Palindrom (rückwärts gelesen gleich vorwärts) ist. Funktioniert auch tadellos. Es wird auch ausgegeben, ob es sich um ein Palindrom handelt oder nicht. Nur danach crasht irgendwas. Jedenfalls bekomm ich eine Fehlermeldung mit "Fault access xxx; read of address xxx". Und das nach dem eigentlichen Programmablauf, wo eigentlich gar nix mehr passiert. Hier das main-Programm mit der Stelle wo irgendwas nicht passt:
Komisch... was kann da nicht stimmen??? Das getchar () wird noch ausgeführt und gleich danach bekomme ich die genannte Fehlermeldung. Spinnt jetzt mein Borland-Compiler oder was? Würde irgendwo ein Zeiger nicht stimmen, würde es bestimmt schon vorher stoppen. Und den allokierten Speicher hab ich danach auch wieder freigegeben (obwohls daran sowieso nicht liegen kann). Ich bin ratlos... 
EDIT: Sorry für die verwackelten Kommentare, bei mir im Browser-Editor sind sie alle auf der gleichen Höhe.

Das Programm soll prüfen, ob ein String ein Palindrom (rückwärts gelesen gleich vorwärts) ist. Funktioniert auch tadellos. Es wird auch ausgegeben, ob es sich um ein Palindrom handelt oder nicht. Nur danach crasht irgendwas. Jedenfalls bekomm ich eine Fehlermeldung mit "Fault access xxx; read of address xxx". Und das nach dem eigentlichen Programmablauf, wo eigentlich gar nix mehr passiert. Hier das main-Programm mit der Stelle wo irgendwas nicht passt:
Code: Alles auswählen
int main ()
{
char *string, *reversed; // string wird eingegeben, und reversed ist string rückwärts gelesen
int n, pal; // n ist die Anzahl der Buchstaben und pal gibt an, ob es sich
// um ein Palindrom handelt (wird von Funktion zurückgeliefert)
printf ("Number of characters: ");
scanf ("%d", &n);
if (n > 0)
{
string = (char *) calloc (n, sizeof (char)); // Speicher für string wird allokiert
readstring (string, &n); // string wird eingegeben
reverse (string, reversed); // string wird rückwärts auf reversed kopiert
pal = compare (string, reversed); // string und reversed werden verglichen
if (pal) // hier wird geprüft, ob der String ein Palindrom ist
printf ("\n\nPalindrom.");
else
printf ("\n\nNot a palindrom.");
free (string); // Speicher wird wieder freigegeben
}
getchar ();
// Genau hier stürzt das Programm ab
return 0;
}

EDIT: Sorry für die verwackelten Kommentare, bei mir im Browser-Editor sind sie alle auf der gleichen Höhe.