Diskussion:Mehrfache Deallokation

Letzter Kommentar: vor 16 Jahren von LeClochard in Abschnitt free(3) oder besser free?

free(3) oder besser free?

Bearbeiten

Hat das eine besondere Bewandnis, dass die Klammer mit der 3 dahinter steht? Oder liegt das an den Manpages von Unix? Ich finde das nur kryptisch und es erschließt sich auch in keiner Weise. Wenn keine Widerpsrühce kommen, würde ich die Klammern mit der 3 wegmachen. --84.160.208.15 00:39, 4. Mär. 2008 (CET)Beantworten

Die 3 in Klammern drückt aus, dass free eine Funktion der C-Bibliothek ist und damit sehr wahrscheinlich sogar plattformübergreifend eingesetzt werden kann. Das weiß man allerdings wohl kaum, wenn man selten auf Unixoiden programmiert. Und dass die Funktion zur C-Bibliothek gehört, steht ja im Artikel. --Robb der Physiker 01:04, 7. Mär. 2008 (CET)Beantworten
Genau. Double free ist ein Problem, das nicht auf C oder Unixoide beschränkt. Warum dann dieser Nichthinweis? --LeClochard 23:23, 8. Mär. 2008 (CET)Beantworten
Heißt das Problem denn im Allgemeinen so oder nur bei C? Wie heißen denn die Deallokatoren anderer (gängiger) Programmiersprachen, bei denen ein vergleichbares Problem auftauchen könnte? --Robb der Physiker 03:31, 9. Mär. 2008 (CET)Beantworten
Es sollte bei jeder Programmierpsrache auftreten, die das nicht irgendwie verwaltet. Siehe auch den Absatz Andere Programmiersprachen. Wobei der Artikel haupsächlich auf C eingeht. Ich würde die Klammern mit der 3 wegmachen und dafür in der Einleitung das Programmiersprachenunabhängiger machen --LeClochard 00:40, 10. Mär. 2008 (CET)Beantworten

Ist WP jetzt auch schon ein Programmierhandbuch? -- FriedhelmW 08:06, 5. Nov 2005 (CET)

Nein, darum geht es gar nicht, vgl. die Wikipedia:Löschkandidaten/28._August_2005#Double_free.28.29_.28bleibt.29.--Gunther 15:11, 5. Nov 2005 (CET)
Der Artikel Zeiger (Informatik) enthält mMn bereits alles wissenswerte. -- FriedhelmW 17:05, 5. Nov 2005 (CET)
Das sehe ich anders. Dort ist ja nur der umgekehrte Fall des memory leak erwähnt.--Gunther 17:12, 5. Nov 2005 (CET)

Hab trotzdem auf Zeiger (Informatik) verlinkt. Der Artikel taugt aber immer noch nicht. -- FriedhelmW 17:52, 5. Nov 2005 (CET)

Abhilfe

Bearbeiten

Ich habe mir mal Gedanken gemacht, wie man ein Double free vermeiden kann:

void *ptr;    /* zeigt irgendwann auf Speicher von malloc() */

if (ptr) {
    free(ptr);
    ptr = NULL;
}

Im weiteren Programmverlauf könnte doch jetzt eine Überprüfung if (ptr) helfen Schlimmeres zu vermeiden, oder irre ich da? --Robb der Physiker 19:43, 18. Feb. 2007 (CET)Beantworten

Das funktioniert nur, wenn es von jedem Speicherbereich genau einen Zeiger gibt. Dies ist aber nicht immer der Fall. Beispielsweise bei einer doppelt verketten Liste ist dies nicht der Fall.--plaicy 19:03, 12. Aug. 2007 (CEST)Beantworten
Solche Konstrukte sind oft anzutreffen und ich warne etwas davor. In vielen Fällen liegt ein Programmfehler vor wenn ein bereits freigegebener Speicher nocheinmal an einem free vorbeikommt, obwohl er es gar nicht dürfte. Der Hinweis oder der Programmabruch wenn free ein zweitesmal auf einen bereits freigegebenen Speicherbereich angwendet wird ist ein "goody" vieler libs - es soll darauf hinweisen das hier etwas nicht stimmt. Und wie Plaicy schon geschrieben hat, beseitigt sie das Problem nicht grundsätzlich. In vielen Implemenationen sind entsprechende Makros zu finden, welche nicht nur Alarm schalgen wenn free auf einen NULL-Pointer oder einen bereits freigegebenen Speicherbereich zegt, sondern auch wenn verscuht wird einen Zeiger != NULL mit malloc zu hinterlegen.
Ist nun im Artikel eingearbeitet --84.160.199.131 21:19, 10. Feb. 2008 (CET)Beantworten