Verhalten von free()



  • Guten Tag,
    ist das Verhalten von free() auf "irgendwelche" und/oder auf Null-Zeiger definiert?

    Beispiel 1:

    char buffer[10];
      free(buffer);
    

    Beispiel 2:

    char *buffer = 0;
      free(buffer);
    

    Beispiel 3:

    char *buffer;
      free(buffer);
    

    Besten Dank für die Hilfe schonmal im voraus - ich finde da irgendwie nichts..



  • Auf "irgendwelche" nicht, nur auf Nullzeiger und auf solche, die vorher von malloc, calloc oder realloc zurückgeliefert wurden. Bei Nullzeigern passiert nichts, in den anderen definierten Fällen wird der Speicherblock freigegeben.



  • Danke, Beispiel 2 ist also erlaubt und Beispiel 3 nicht. Wie siehts mit Beispiel 1 aus? Wahrscheinlich auch verboten oder?..
    Na gut, kann man wohl nichts machen, vielen Dank jedenfalls 😉

    Ach ja - falls Du da zufällig eine passende Stelle im Standard kennen würdest.. 😃



  • cooky451 schrieb:

    Wie siehts mit Beispiel 1 aus? Wahrscheinlich auch verboten oder?..

    Ja, natürlich.

    Ach ja - falls Du da zufällig eine passende Stelle im Standard kennen würdest.. 😃

    [#2] 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.



  • Super, alles geklärt.


Anmelden zum Antworten