(C) malloc und free

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

(C) malloc und free

Beitrag von stampuhh » So Nov 22, 2009 3:47 pm

Ich arbeite ja gerade an den Listen aus dem Tutorial.

Dann habe ich jetzt einfach mal um die Ausgabe auch etwas zu gestalten so ein Address-Struct aufgebaut

Code: Alles auswählen

struct Address
{
    int           hausnummer;
    char          * Familienname;
};
Wenn ich der Node jetzt eine Hausnummer und einen Familiennamen zuweise klappt das ganz gut. Also für den Familiennamen allokiere ich ja Speicher per malloc. Wenn ich die Node jetzt lösche dann muss ich den ja auch wieder freigeben. Wenn alle meine Nodes einen Namen haben ist das ja kein Problem. Aber wenn ich jetzt eine Node habe, welche keinen Familiennamen hat und ich dann ein free() aufrufe dann gibt es ein Problem.

Wie kann ich überprüfen ob Familienname überhaupt belegt ist? Ich kann Familienname ja einfach ausgeben (egal ob belegt oder nicht) mit toBeRemoved->Data.Familienname. Da steht jetzt wenn ich es nicht belege irgendein Pfad drin. Wenn ich jetzt aber ein free aufrufe geht das nicht.

Eine Abfrage ala if(toBeRemoved->Data.Familienname != NULL ) führt leider nicht zum gewünschten Ergebnis. Ist anscheinend immer != NULL :(
Habe da jetzt auch schon gegoogelt und hier im Forum gesucht aber es ist irgendwie schwer da was zu finden...zu malloc und free gibt es ja genug. Nur alles was ich finde geht davon aus, dass auch wirklich was belegt ist bevor free aufgerufen wird.

gruß stampuhh
NachDenkSeiten.de

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: (C) malloc und free

Beitrag von nufan » So Nov 22, 2009 4:01 pm

stampuhh hat geschrieben:Eine Abfrage ala if(toBeRemoved->Data.Familienname != NULL ) führt leider nicht zum gewünschten Ergebnis. Ist anscheinend immer != NULL :(
Sollte eigentlich so gehen, aber du musst nach dem Erstellen der Struktur dem Zeiger zum Namen NULL zuweisen, da sonst Speichermüll im Zeiger steht (der normal != NULL ist).

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: (C) malloc und free

Beitrag von stampuhh » So Nov 22, 2009 4:28 pm

Danke^^

Mal wieder so ein dummer Fehler. So klappt alles wie gewünscht!

gruß stampuhh
NachDenkSeiten.de

Antworten