Frage zu free()
-
Guten abend zusammen
wie im titel schon angegeben, habe ich eine Frage zu free()
und zwar habe ich folgendes:
Ich habe 2 Structs:struct s_buchkatalog { /** Dynamisches Array mit Buechern. */ Buch *buecher; /** Aktuelle Anzahl an Buechern im Katalog. */ unsigned int anzahl_buecher; };
struct s_Buch { ..... ..... ..... ..... char * Titel; }; typedef struct s_Buch Buch;
dann lese ich aus einer Datei Später etwas ein:
/*Zeile pruefen auf SyntaxFehler*/ if ( !(sscanf(ZEILE,"...........................%[a-z A-Z0-9.,];", ...............................,&TITEL)==11) ){ ..... .... ..... /*Speicher fuer Titel allokieren*/ buch.Titel = malloc(strlen(&TITEL));
so jetzt habe ich dann auch speicher allociert für den Titel
jetzt muss man man ja speicher wieder freigeben zum ende eines Programms, dazu wollte ich mir eine Funktion schreiben die ganz am ende aufgerufen wird und den Speicher wieder frei gibt..
wie kann ich aus einem Struct den speicher von einem String wieder frei geben?mein ansatz:
for (i= katalog->anzahl_buecher -1; i>-1; i--){ //-1 da array und das fängt ja bei 0 an ^^ free(katalog->buecher[i].Titel);
Aber das klappt nicht, wie gebe ich denn nun wirklich alles frei? also alle Titel der Buecher die im Katalog stehen...
MFG
Luke
-
Hi,
ich kann mir schon vorstellen, warum das nicht so tut wie du willst. Kannst Du zur Sicherheit nochmal die Compilerausgabe posten.
Auf den ersten Blick würde ich sagen, dass man nicht auf katalog->buecher**[i]**
so zugreifen kann weil es ja nur als Pointer und nicht als Array deklariert ist.
mfg
-
ich bekomme keine Ausgabe, ich habe nnur ne Fehlermeldung zu bieten...
programmiere mit Visual Studio 2005 professionalnaja hier die meldung, sobald er auf das free trifft:
Debug Error!
Programm:...
HEAP CORRUPTION DETECTED: after Normal block (#61) at 0x00B91908.
CRT detected that the application wrote to memory after end of heap buffer.(Press retry to debug the application)
Edit: meine Ausgaben gehen in verschiedene Dateien, und da kommt auch nirgendwo nen Fehler, erst beim freigeben des speichers ganz am ende des Programms
-
Welchen Datentyp hat denn TITEL, denn folgendes kommt mit eigenartig vor:
buch.Titel = malloc(strlen(&TITEL)); // was macht das & da?
Und prüfst du den Rückgabewert auf NULL?
Und wie hast du deine Bücher allokiert?