Ist der Compiler berechtigt, freigegebene Zeigervariablen zu recyceln?
Es wurde behauptet, dass
s steht einem Compiler frei, die Zeigervariable nach @ für einen anderen Zweck wiederzuverwendethe realloc befreit werden, Sie können also nicht garantieren, dass es denselben Wert hat wie zuvor
ie
void *p = malloc(42);
uintptr_t address = (uintptr_t)p;
free(p);
// [...] stuff unrelated to p or address
assert((uintptr_t)p == address);
könnte daneben gehen
C11 Anhang J.2 lautet
Der Wert eines Zeigers, der sich auf den durch einen Aufruf der Funktion free oder realloc freigegebenen Speicherplatz bezieht, wird verwendet (7.22.3). ist nicht definier]
aber der anhang ist natürlich nicht normativ.
Anhang L.3 (der normativ, aber optional ist) sagt uns, dass, wenn
Der Wert eines Zeigers, der sich auf den durch einen Aufruf der Funktion free oder realloc freigegebenen Speicherplatz bezieht, wird verwendet (7.22.3).
as Ergebnis darf ein kritisches undefiniertes Verhalten sei
Dies bestätigt die Behauptung, aber ich würde gerne ein entsprechendes Zitat aus der Norm anstelle des Anhangs sehen.