Ich schreibe ein C-Programm, das aus einem Verzeichnis alle .xcf-Dateien ausliest und deren Namen ohne Endung in eine Liste schreibt.
Damit will ich nachher weiterarbeiten.
Ich hab einen ganz merkwürdigen Fehler: folgender Code funktioniert, wenn man den Testausgaben glauben schenkt:
Code:
int maxlaenge=0;
int laenge=0;
//für Verzeichnis+Bilderarbeit
DIR* bildverzeichnis = opendir("Bilder");
struct dirent* inhalt;
char** bildliste;
short listsize=0;
int i=0;
while ( (inhalt = readdir(bildverzeichnis) ) !=NULL ) {
//Alle Gimp-Dateien rauspuhlen und die xcf-Endung kicken
if(strstr((const char*)inhalt->d_name,".xcf")!=NULL) {
printf("Datei %s ",inhalt->d_name);
bildliste[listsize]=(char*)malloc((strlen(inhalt->d_name)-3)*sizeof(char));
strcpy(bildliste[listsize],strtok(inhalt->d_name, ".xcf"));
//direkt die Länge des Dateinamens fürs eyecandy sichern
laenge=strlen((const char*)bildliste[listsize])+4;
if(maxlaenge < laenge)
maxlaenge=laenge;
printf("Länge: %d",maxlaenge);
listsize++;
printf("Listsize: %d\n",listsize);
}
}
Sobald ich aber IRGENDEINE Anweisung nach der letzten }-Klammer bringe, also z.B. printf("hallo");, kommt ein Speicherzugriffsfehler.
Das ist nunmal super-strange, vor allem weil in printf("hallo") gar nicht auf irgendwelche Arrays o.ä zugegriffen wird.
Was mich auch wundert ist die normale Ausgabe des Programms:
Code:
26316: symbol=strtok; lookup in file=./make
26316: symbol=strtok; lookup in file=/lib/libc.so.6
26316: symbol=strcpy; lookup in file=./make
26316: symbol=strcpy; lookup in file=/lib/libc.so.6
Datei Bild1.xcf Länge: 9Listsize: 1
Datei Bild2.xcf Länge: 9Listsize: 2
...
Speicherzugriffsfehler
Die ersten 4 Zeilen kommen auch wenn das Programm ohne Zugriffsfehler läuft.
Also entweder habe ich Mist gemacht, was mich um 2 Uhr nachts nicht wundert oder C hat seit neustem irgendeine ganz dicke Macke.
Ich behaupte einfach mal ganz dreist, alles richtig gemacht zu haben
(das Programm heißt make, aber ich rufe es mit ./make auf, so dass keine Verwechselungsgefahr mit gmake besteht)
Lesezeichen