c++ delete und NULL Pointer

Kamikaze

Warrior of Sunlight
Staff member
Birgt es irgendwelche Risiken oder ist es schlechter Stil delete bei Pointern auf NULL aufzurufen?

Sollte ich lieber so etwas tun?
Code:
if (pointer)
	delete pointer;
 
delete auf einen NULL Pointer, fuehrt eigentlich zu einem SegFault. Daher teste ich immer, ob ein Pointer NULL ist, sofern ich nicht sicherstellen kann, dass er es beim delete nicht ist.
 
Birgt es irgendwelche Risiken oder ist es schlechter Stil delete bei Pointern auf NULL aufzurufen?

Sollte ich lieber so etwas tun?
Code:
if (pointer)
	delete pointer;

Weder noch. Einen NULL Pointer kann man in C++ einfach und sicher per delete "löschen", jedoch setzt delete den Zeiger nicht auf NULL. Vergleiche folgendes Code-Stück:

Code:
int
main (int argc, char * const argv[]) {
	int *f = new int;

	printf("(1) f=%p\n", f);
	
	delete f;
	printf("(2) f=%p\n", f);

	f = NULL;
	printf("(3) f=%p\n", f);
	
	delete f;
	printf("Ok\n");

	return 0;
}

Liefert:

Code:
$ c++ -o main main.cpp 
$ ./main 
(1) f=0x300300
(2) f=0x300300
(3) f=0x0
Ok
 
Ist schon klar, dass der Pointer nicht verändert wird. Ich will bloß wissen ob delete bei einem NULL Pointer irgendwo Speicher freigibt, was ja nicht passieren sollte.

So wie ich dich verstanden habe passiert das auch nicht. Den Segfault von xbit gibt es bei mir nicht, wenn ich es ausprobiere, also denke ich mal du hast Recht.
 
Ist schon klar, dass der Pointer nicht verändert wird. Ich will bloß wissen ob delete bei einem NULL Pointer irgendwo Speicher freigibt, was ja nicht passieren sollte.

So wie ich dich verstanden habe passiert das auch nicht. Den Segfault von xbit gibt es bei mir nicht, wenn ich es ausprobiere, also denke ich mal du hast Recht.

Zitat aus dem Stroustrup: "Der delete-Operator darf nur auf von new gelieferte Zeiger oder Null angewendet werden. Eine Anwendung auf Null hat keine Auswirkungen."
 
Back
Top