Sie sollten so programmieren, dass der alte Zeiger überschrieben wird, ja. Der alte Speicher wird nicht mehr zugewiesen und kann daher von einem anderen Teil Ihres Programms (oder z. B. einem System-Thread) neu zugewiesen und jederzeit überschrieben werden, nachdem Sie realloc aufgerufen haben.
Der neue Speicher enthält immer die gleichen Daten wie der alte Speicher (sie werden bei Bedarf für Sie kopiert), aber nur bis zur Größe des alten Blocks, der darüber hinausgehende Platz wird nicht initialisiert.
Wenn Sie eine Kopie wollen, machen Sie ein neues malloc und verwenden Sie memcpy.
Wenn Sie realloc aufrufen, wird die Implementierung von erhöhen. die Größe, könnte eines dieser Dinge passieren:
- Ein neuer Block wird zugewiesen und der Inhalt des alten Speichers kopiert, der alte Block wird freigegeben, der neue Zeiger wird zurückgegeben.
- Wenn der Bereich nach dem Block nicht zugewiesen ist, kann der bestehende Block erweitert und derselbe Zeiger zurückgegeben werden.
Da Sie nicht wissen können, was passiert ist, oder sogar, wenn eine völlig andere Implementierung als die oben vorgeschlagene verwendet wird, sollten Sie immer gemäß der Spezifikation von realloc programmieren, d. h., Sie dürfen den alten Zeiger nicht mehr verwenden und müssen den neuen verwenden.