dyn. Speicherverwaltung free

C

cappi

Hallo zusammen,

ich habe eine frage an die Experten.

muss an free() die Anfangsadresse des zu freigebenden Bereiches übergeben werden,
oder geht auch eine Adresse die im Bereich mitten drin ist.

char *ptr = malloc(sizeof(char)*256);

ptr +=20;

free(ptr);

Gruß
 
danke erstmal für die antwort.

gewisser Zweifel bleibt mir jedoch.

ich habe es wage in Erinnerung dass die Info wieviel nun frei zu geben ist nicht an einen Adresse sondern an einen Adressbereich gebunden ist.
 
danke erstmal für die antwort.

gewisser Zweifel bleibt mir jedoch.

ich habe es wage in Erinnerung dass die Info wieviel nun frei zu geben ist nicht an einen Adresse sondern an einen Adressbereich gebunden ist.
Das kommt auf die Implementierung an. Der C99-Standard sagt dazu:
The free function causes the space pointed to by ptr to be deallocated, that is, made
available for further allocation. If ptr is a null pointer, no action occurs. Otherwise, if
the argument does not match a pointer earlier returned by the calloc, malloc, or
realloc function, or if the space has been deallocated by a call to free or realloc,
the behavior is undefined.
Das Verhalten deines Beispielcodes ist also undefiniert. Es kann zwar durchaus sein, dass es mit der Standardbibliothek eines bestimmten Herstellers trotzdem wie vorgesehen funktioniert, aber eine Garantie dafür gibt es nicht.

Grüße,
Matthias
 
Im Debug-Mode unter VS2008 erzeugt der Code einen Laufzeit-Fehler (Heap corruption) wenn man free aufruft.
 
Zurück