Kurzfrage zu malloc und free
-
Tach.
Normal schreibe ich immer:
if (var) free (var);
Das ist aber völlig unnötig oder? Ein einfaches
free (var);
reicht?
char *chr; // würde hier das free() einen Fehler verursachen, weil es kein malloc gab? // Wenn dem so ist: würde ein if (chr) vor dem Fehler schützen? free (chr);
-
shorty_von_short schrieb:
Normal schreibe ich immer:
if (var) free (var);
Das ist aber völlig unnötig oder? Ein einfaches
free (var);
reicht?
Ja, letzteres reicht.
char *chr; // würde hier das free() einen Fehler verursachen, weil es kein malloc gab? // Wenn dem so ist: würde ein if (chr) vor dem Fehler schützen? free (chr);
Frag dich doch mal selber, wenn es einen Fehler verursachen würde und du den Fehler über eine Abfrage umgehen könntest, würde das den Fehler vermeiden? Ja. Aber das ist eh alles unnötig.
MfG
GPC
-
Danke.
Wozu sieht man dann aber in DircetX Beispielen immer ein if (var) delete(var) wenn es doch "egal" ist?
"Ich mache nicht nur leere Versprechungen, ich halte mich auch daran." (Edmund Stoiber)
*totlach*
-
shorty_von_short schrieb:
Wozu sieht man dann aber in DircetX Beispielen immer ein if (var) delete(var) wenn es doch "egal" ist?
Keine Ahnung, vermutlich nehmen sie Referenzen auf Zeiger entgegen. Kenne mich mit DX nicht aus.
Grundsätzlich sollte man seine Zeiger aber (a) so spät wie möglich und (b) mit den korrekten Werten (also Adressen) initialiseren. Geht letzteres nicht, bitte mit 0 initialisieren.
MfG
GPC
-
ich initialisiere lieber nur mit 0 wenn der zeiger den status "leer" haben darf. wenn nicht, dann _soll_ die anwendung abschmieren wenn ich ein free mache wenn der zeiger ungueltig ist - denn dann habe ich ja einen logik fehler gemacht.
gut, aber das ist halt meine meinung
ein if() vor einem free ist unnoetig und vor uninitialisierten zeigern kann man sich eh nicht schuetzen.
-
Shade Of Mine schrieb:
ich initialisiere lieber nur mit 0 wenn der zeiger den status "leer" haben darf. wenn nicht, dann _soll_ die anwendung abschmieren wenn ich ein free mache wenn der zeiger ungueltig ist - denn dann habe ich ja einen logik fehler gemacht.
hehe, ich mache das immer andersrum, bei mir wird beim Dereferenzieren nie auf 0 geprüft, wenn er dann abschmiert weiß ich auch, dass ich nen Logikfehler drinhab
-
Probleme kann es geben wenn du den Speicher doppelt frei gibst, wenn du "schreibfaul"
bist kannst du dir ja auch ein Makro schreiben, dann sparst du dir die ueberpruefung!
-
moe szyslak schrieb:
Probleme kann es geben wenn du den Speicher doppelt frei gibst, wenn du "schreibfaul"
bist kannst du dir ja auch ein Makro schreiben, dann sparst du dir die ueberpruefung!
erklaermir mal wie?
#define myfree(p) free(p);p=NULL;
oder was meinst du?
-
GPC schrieb:
hehe, ich mache das immer andersrum, bei mir wird beim Dereferenzieren nie auf 0 geprüft, wenn er dann abschmiert weiß ich auch, dass ich nen Logikfehler drinhab
es muss aber nicht zwangsläufig abschmieren wenn der inhalt des pointers falsch ist...
-
net schrieb:
GPC schrieb:
hehe, ich mache das immer andersrum, bei mir wird beim Dereferenzieren nie auf 0 geprüft, wenn er dann abschmiert weiß ich auch, dass ich nen Logikfehler drinhab
es muss aber nicht zwangsläufig abschmieren wenn der inhalt des pointers falsch ist...
ach, die Chancen stehen ganz gut, no risk no fun
Btw. Nicht dass das noch wirklich einer macht: das war n Witz.
-
bei null schmiert er aber per definition ab...