ich dachte eigentlich das prinzip von malloc() und free() verstanden zu haben, leider erhalte ich hier trotzdem einen Speicherzugriffsfehler.
Ich habe hier ein kleines Programm, das in einem Rutsch sehr viele Dateien umbenennen soll.
Hier mal der Code-Ausschnitt dazu der meiner Meinung nach Probleme macht:
while((ptr_mydir=readdir(mydir)) != NULL) { //Ausgabe der Dateien if(strcmp((*ptr_mydir).d_name,".") != 0) { if(strcmp((*ptr_mydir).d_name,"..") != 0) { i_Files += 1; /*Allokation des Speichers für den alten Dateipfad*/ ptr_dirNameOld = malloc(sizeof(FilePath)+sizeof(DELIMETER)+sizeof((*ptr_mydir).d_name)); ptr_cpyOld = malloc(sizeof(FilePath)+sizeof(DELIMETER)+sizeof((*ptr_mydir).d_name)); strcpy(ptr_dirNameOld,FilePath); strcat(ptr_dirNameOld,DELIMETER); strcat(ptr_dirNameOld,(*ptr_mydir).d_name); /*Sicherung des Dateinamens machen*/ strcpy(ptr_cpyOld,ptr_dirNameOld); /*Auslesen der Dateiendung*/ posPoint = strtok(ptr_dirNameOld,"."); posPoint = strtok(NULL,".");/*Nächsten Token (Dateiendung) auslesen*/ /*Allokation des Speichers für den neuen Dateinamen*/ ptr_dirNameNew = malloc(sizeof(FilePath)+sizeof(DELIMETER)+sizeof(NewFileName)+sizeof(c_Files + 1)+sizeof(".")+sizeof(posPoint)); strcpy(ptr_dirNameNew,FilePath); strcat(ptr_dirNameNew,DELIMETER); strcat(ptr_dirNameNew,NewFileName); free(ptr_dirNameOld); free(ptr_cpyOld); free(ptr_dirNameNew); } }
Ich habe das ganze mal auf eine "lesbare" Länge gekürzt, aber das Problem bleibt ja erhalten.
Ich habe das so verstanden, das wenn ich mit malloc() Speicher reserviere und ihn dann wieder freigebe es eigentlich keine Probleme geben dürfte, oder ist hier die while-Schleife das Problem?
Oder steh ich grad nur auf dem Schlauch?
Sobald die erste Datei umbenannt ist, kommt der Speicherzugriffsfehler, dass heisst nach dem ersten mal free().
Ausgabe:
Zitat
fabi@schnecki-workstation ~/Programmierung/C_C++/Renamer $ ./renamer /home/fabi/Programmierung/C_C++/Renamer/Bilder/ test
Dateipfad: /home/fabi/Programmierung/C_C++/Renamer/Bilder/
Verzeichnis wurde erfolgreich geoffnet: /home/fabi/Programmierung/C_C++/Renamer/Bilder/
Anzahl Dateien : 1669
Dateiname (alt): /home/fabi/Programmierung/C_C++/Renamer/Bilder/bild1.jpg
Dateiname (neu): /home/fabi/Programmierung/C_C++/Renamer/Bilder/test1.jpg
Speicherzugriffsfehler
Dateipfad: /home/fabi/Programmierung/C_C++/Renamer/Bilder/
Verzeichnis wurde erfolgreich geoffnet: /home/fabi/Programmierung/C_C++/Renamer/Bilder/
Anzahl Dateien : 1669
Dateiname (alt): /home/fabi/Programmierung/C_C++/Renamer/Bilder/bild1.jpg
Dateiname (neu): /home/fabi/Programmierung/C_C++/Renamer/Bilder/test1.jpg
Speicherzugriffsfehler
Vielen Dank für eure Hilfe.
lg,
Fabi