URL: https://www.overclockers.at/coding-stuff/c_warning_iso_c90_does_not_support_205157/page_2 - zur Vollversion wechseln!
Wenn ich sowas mache, bekomme ich eine schöne Fehlermeldung und das Programm bricht ab:
Code:#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; }
Code:#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; }
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 ...
Zitat von BlairZitat von Starskyhoffen 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!
Zitat von watchoutDas 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.
Zitat von lama007Warum werden Zeiger nicht automatisch mit NULL initialisiert?
Zitat von lama007Wenn ich keinen Fehlermeldung will, braucht es dazu noch eine if ( zeiger ) - Abrfrage.
Zitatfree() 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.
Das getline-Manual ist schuld
.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026