lama007
OC Addicted
|
Wenn ich sowas mache, bekomme ich eine schöne Fehlermeldung und das Programm bricht ab: #include <stdio.h>
#include <stdlib.h>
int main( void ) {
char *ptr = "Hello, World!";
printf( "%s\n", ptr );
free( ptr );
printf( "Test, Test\n" );
return 0;
}
Und das schaut auch gut aus: #include <stdio.h>
#include <stdlib.h>
int main( void ) {
char *ptr;
printf( "Hello, World!\n" );
if ( ptr ) {
printf( "free!!!\n" );
free( ptr );
}
printf( "Test, Test\n" );
return 0;
}
Ist "if ( ptr ) { free( ptr ) };" ein Schutz vor falschem "free()"?
|
Blair
Big d00d
|
wenn du ptr nicht auf NULL setzt, bringt dir die abfrage garnix. free auf einen pointer auf einen speicherbereich im stack auszuführen endet wie schon öfter erwähnt in undefiniertem verhalten, was nicht gerade toll ist.
lies dir mal die literatur zu stack, heap und pointer durch ...
|
lama007
OC Addicted
|
hoffen wir´s. trotz aller bugs ist tdu für mich vom konzept und der umsetzung her einer der geilsten racer überhaupt - bis eben auf die bugs, die leider fast alles an einem genialen spiel kaputt gemacht haben. aber die rennen mit Friedel und bodo waren einfach geil!
Zu meiner Verteidigung: ich hatte Gedanken in diese Richtung, weiß aber nicht mehr genau, wieso ich es nicht gemacht habe. Warum werden Zeiger nicht automatisch mit NULL initialisiert?
|
lama007
OC Addicted
|
Das ganze lässt sich oft recht leicht anstellen - initialisierst du zb. so einen Pointer mit NULL kannst du recht sicher davon ausgehen dass du gefahrlos free() aufrufen kannst, weil der Pointer ja dann entweder NULL ist oder auf einen passenden Speicherbereich zeigt. Wenn ich keinen Fehlermeldung will, braucht es dazu noch eine if ( zeiger ) - Abrfrage.
|
that
Hoffnungsloser Optimist
|
Warum werden Zeiger nicht automatisch mit NULL initialisiert? Weil Variablen in C nie automatisch initialisiert werden.
|
that
Hoffnungsloser Optimist
|
Wenn ich keinen Fehlermeldung will, braucht es dazu noch eine if ( zeiger ) - Abrfrage. if (p) free(p) bringt überhaupt nichts, es macht nur das Programm etwas langsamer und größer. Lies nochmal den Quote von Watchout: free() frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc(), calloc() or realloc(). Otherwise, or if free(ptr) has already been called before, undefined behaviour occurs. If ptr is NULL, no operation is performed.
|
lama007
OC Addicted
|
Das getline-Manual ist schuld  .
|