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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage