[C] warning: ISO C90 does not support ... - Seite 2

Seite 2 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c_warning_iso_c90_does_not_support_205157/page_2 - zur Vollversion wechseln!


lama007 schrieb am 27.02.2009 um 15:09

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; 
}

Und das schaut auch gut aus:

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; 
}

Ist "if ( ptr ) { free( ptr ) };" ein Schutz vor falschem "free()"?


Blair schrieb am 27.02.2009 um 17:03

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 schrieb am 28.02.2009 um 08:43

Zitat von Blair
Zitat von Starsky
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 schrieb am 28.02.2009 um 09:21

Zitat von watchout
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 schrieb am 28.02.2009 um 11:55

Zitat von lama007
Warum werden Zeiger nicht automatisch mit NULL initialisiert?

Weil Variablen in C nie automatisch initialisiert werden.


that schrieb am 28.02.2009 um 11:57

Zitat von lama007
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:

Zitat
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 schrieb am 28.02.2009 um 16:26

Das getline-Manual ist schuld :cool: .




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026