_realloc_dbg
Belegt einen angegebenen Speicherblock im Heap durch Verschieben und/oder Ändern der Größe des Blocks erneut (nur Debugversion).
Syntax
void *_realloc_dbg(
void *userData,
size_t newSize,
int blockType,
const char *filename,
int linenumber
);
Parameter
userData
Zeiger zum vorherigen belegten Speicherblock.
newSize
Angeforderte Größe für den neu belegten Block (Bytes).
blockType
Angeforderter Typ für den neu zugeordneten Block: _CLIENT_BLOCK
oder _NORMAL_BLOCK
.
filename
Zeigen Sie auf den Namen der Quelldatei, die den realloc
Vorgang angefordert hat.NULL
linenumber
Zeilennummer in der Quelldatei, in der der realloc
Vorgang angefordert wurde, oder NULL
.
Die filename
Parameter sind linenumber
nur verfügbar, wenn _realloc_dbg
explizit aufgerufen oder die _CRTDBG_MAP_ALLOC
Präprozessorkonstante definiert wurde.
Rückgabewert
Nach erfolgreichem Abschluss gibt diese Funktion entweder einen Zeiger auf den Benutzerteil des neu zugewiesenen Speicherblocks zurück, ruft die neue Handlerfunktion auf oder gibt zurück NULL
. Eine vollständige Beschreibung des Rückgabeverhaltens finden Sie im folgenden Abschnitt "Hinweise". Weitere Informationen zur Verwendung der neuen Handlerfunktion finden Sie in der realloc
Funktion.
Hinweise
_realloc_dbg
ist eine Debugversion der realloc
Funktion. Wenn _DEBUG
sie nicht definiert ist, wird jeder Anruf _realloc_dbg
auf einen Anruf reduziert realloc
. Sowohl realloc
als auch _realloc_dbg
belegen einen Speicherblock im Basisheap neu, jedoch verfügt _realloc_dbg
über mehrere Debugfunktionen: Puffer auf beiden Seiten des Benutzerteils des Blocks zum Prüfen auf Speicherverluste, einen Blocktypparameter zum Nachverfolgen bestimmter Belegungstypen und filename
/linenumber
-Informationen zum Ermitteln des Ursprungs von Belegungsanforderungen.
_realloc_dbg
belegt den angegebenen Speicherblock neu mit etwas mehr Speicherplatz als der angeforderten newSize
. newSize
kann größer oder kleiner sein als die Größe des ursprünglich belegten Speicherblocks. Der zusätzliche Speicherplatz wird vom Debug-Heap-Manager verwendet, um die Debugspeicherblöcke zu verknüpfen und der Anwendung Debugheaderinformationen und Überschreiben von Puffern bereitzustellen. Die Neuzuordnung kann dazu führen, dass der ursprüngliche Speicherblock an eine andere Position im Heap verschoben und die Größe des Speicherblocks geändert wird. Wenn der Speicherblock verschoben wird, wird der Inhalt des ursprünglichen Blocks überschrieben.
_realloc_dbg
legt errno
auf ENOMEM
fest, wenn eine Speicherbelegung fehlschlägt oder der benötigte Speicherplatz (einschließlich des bereits erwähnten Mehraufwands) _HEAP_MAXREQ
überschreitet. Informationen zu diesem und anderen Fehlercodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Informationen dazu, wie Speicherblöcke in der Debugversion des Basis heap zugeordnet, initialisiert und verwaltet werden, finden Sie unter CRT Debug Heap Details. Informationen zu den Zuordnungsblocktypen und deren Verwendung finden Sie unter "Typen von Blöcken" im Debug-Heap. Informationen zu den Unterschieden zwischen Standard heap-Funktionen und Debugversionen finden Sie unter Debugversionen von Heap-Zuordnungsfunktionen.
Anforderungen
Routine | Erforderlicher Header |
---|---|
_realloc_dbg |
<crtdbg.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Libraries
Nur Debugversionen von C-Laufzeitbibliotheken
Beispiel
Sehen Sie sich das Beispiel im Artikel an _msize_dbg
.