2017-04-12 3 views
1

Ich möchte nur überprüfen, ob ich die Bedeutung der GlobalReAlloc Funktion richtig verstanden habe. In Kürze ändert GlobablRealloc Größe oder Speicherobjekt oder seine Attribute. Ich habe folgende Fragen:Soll ich globalen Speicher nach GlobalRealloc freigeben?

HGlobal old_mem = GlobalAlloc(...); 
HGlobal new_mem = GlobalReAlloc(12345, old_mem, 0); // Should I free old_mem? 
  1. Soll ich altes Speicherobjekt frei nach reallocing? Wie ich verstanden habe, ändert die Funktion nur das Speicherobjekt selbst und gibt das aktualisierte Speicherobjekt zurück. Bitte korrigieren Sie mich, wenn ich falsch liege
  2. Soll ich im Falle einer fehlgeschlagenen Neuzuweisung das alte Speicherobjekt freigeben? Keine

Antwort

4
  1. , wenn die Funktion erfolgreich ist, der alte Speicher nun ungültig ist, wurde der Inhalt auf den neu zugewiesenen Bereich kopiert, und Sie sollen die neuen Zeiger von jetzt an nutzen. Wenn die Funktion erfolgreich ist, geben Sie den alten Speicher nicht frei

  2. Wenn die Funktion fehlschlägt, wurden keine Änderungen vorgenommen. Dies bedeutet, dass der alte Zeiger immer noch gültig ist und Sie ihn verwenden können. Wenn Sie jetzt den alten Zeiger freigeben möchten, können Sie das tun. Im Allgemeinen ist der Status des Programms jetzt derselbe wie vor dem Aufruf von GlobalReAlloc.

Verwandte Themen