Freigeben über


_expand_dbg

Ändert einen angegebenen Speicherblock im Heap durch das Erweitern oder den Vertrag Größe des Blocks (nur Debugversion).

void *_expand_dbg( 
   void *userData,
   size_t newSize,
   int blockType,
   const char *filename,
   int linenumber 
);

Parameter

  • userData
    Ein Zeiger auf das zuvor belegten Speicherblock.

  • newSize
    Angeforderte neue Größe für den Block (in Byte).

  • blockType
    Angeforderter Typ für die Größe geänderten Block: _CLIENT_BLOCKoder _NORMAL_BLOCK.

  • filename
    Ein Zeiger auf den Namen der Quelldatei mit Erweiterungsvorgang oder NULLangefordert hat.

  • linenumber
    Zeilennummer in der Quelldatei, in der der Erweiterungsvorgang oder NULLangefordert wurde.

Die filename und linenumber-Parameter sind nur verfügbar, wenn _expand_dbg explizit aufgerufen wurde oder die _CRTDBG_MAP_ALLOC Präprozessor konstante definiert wurde.

Rückgabewert

Bei erfolgreichem Abschluss einen Zeiger auf den _expand_dbg gibt der Größe veränderten Speicherblock zurück.Da der Arbeitsspeicher nicht verschoben wird, ist die Adresse und die userData.Wenn ein Fehler aufgetreten ist, oder der Block nicht auf die angeforderte Größe vergrößert werden konnte, gibt er NULLzurück.Wenn ein Fehler auftritt, wird vom Betriebssystem errno mit Informationen über die Art des Fehlers.Weitere Informationen zu errno finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.

Hinweise

Die _expand_dbgFunktion ist eine Debugversion der _Erweitern-Funktion.Wenn _DEBUG nicht definiert ist, wird jeder Aufruf von _expand_dbgzu einem Aufruf von _expandreduziert._expandändern und _expand_dbgGröße Basisheap einen Speicherblock im _expand_dbg bringt jedoch einige Debugfunktionen unter: Puffer auf beiden Seiten des Benutzers zu einem Teil des Verlusten Parameter Blockformat, um bestimmte Typen von Zuordnungen zu verfolgen und filename/linenumber Informationen zu testen, Blocks um den Ursprung Zuordnung von Anforderungen zu bestimmen.

_expand_dbg ändert den angegebenen Speicherblock mit etwas mehr Platz als angeforderte Größe newSize.newSize ist möglicherweise größer oder kleiner als die Größe des ursprünglich belegten Speicherblocks.Das zusätzliche Speicherplatz wird vom Debugheap Manager, um die Programmdebuginformationen Speicherblöcke zu verknüpfen und die Anwendung bereitzustellen und Debuggen mit Headerinformationen Puffer zu überschreiben.Das Größenanpassung wird erreicht, indem Sie den ursprünglichen Speicherblock oder Vertrag erweitert._expand_dbg ändert nicht den Speicherblock, wie die _realloc_dbg-Funktion übernimmt.

Wenn newSize größer als die ursprüngliche Blockgröße ist, wird der Speicherblock erweitert.Während einer Erweiterung wenn der Speicherblock nicht erweitert werden kann, um die angeforderte Größe aufzunehmen, wird NULL zurückgegeben.Wenn newSize kleiner als die ursprüngliche Blockgröße Speicherblocks Vertrag ist, wird abgeschlossen, wenn die neue Größe abgerufen wird.

Weitere Informationen zum Speicherblöcke in der Debugversion des Basisheaps zugeordnet, initialisiert und verwaltet werden, finden Sie unter Speicherverwaltung und Debugheap.Weitere Informationen zu den Typen von Zuordnungen blocks und wie diese verwendet werden, finden Sie unter Blocktypen auf dem Debugheap.Weitere Informationen über die Unterschiede zwischen den Aufrufen einer Funktion und ihrer heap Standard in einem Debugbuild Debugversion einer Anwendung finden Sie unter Verwenden der Debugversion für die Grundversion.

Diese Funktion überprüft seine Parameter.Wenn memblock ein NULL-Zeiger ist, oder wenn Größe größer als _HEAP_MAXREQist, Aufrufe dieser Funktion ein ungültiger Parameter für, wie in Parametervalidierungbeschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, wird errno zu EINVAL festgelegt, und die Funktion gibt NULLzurück.

Anforderungen

Routine

Erforderlicher Header

_expand_dbg

<crtdbg.h>

Weitere Informationen finden Sie unter Kompatibilität Kompatibilität in der Einführung.

Bibliotheken

Debugversionen von nur C .

Beispiel

// crt_expand_dbg.c
//
// This program allocates a block of memory using _malloc_dbg
// and then calls _msize_dbg to display the size of that block.
// Next, it uses _expand_dbg to expand the amount of
// memory used by the buffer and then calls _msize_dbg again to
// display the new amount of memory allocated to the buffer.
//

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <crtdbg.h>

int main( void )
{
   long *buffer;
   size_t size;

   // Call _malloc_dbg to include the filename and line number
   // of our allocation request in the header
   buffer = (long *)_malloc_dbg( 40 * sizeof(long),
                                 _NORMAL_BLOCK, __FILE__, __LINE__ );
   if( buffer == NULL )
      exit( 1 );

   // Get the size of the buffer by calling _msize_dbg
   size = _msize_dbg( buffer, _NORMAL_BLOCK );
   printf( "Size of block after _malloc_dbg of 40 longs: %u\n", size );

   // Expand the buffer using _expand_dbg and show the new size
   buffer = (long *)_expand_dbg( buffer, size + sizeof(long),
                                 _NORMAL_BLOCK, __FILE__, __LINE__ );

   if( buffer == NULL )
      exit( 1 );
   size = _msize_dbg( buffer, _NORMAL_BLOCK );
   printf( "Size of block after _expand_dbg of 1 more long: %u\n",
           size );

   free( buffer );
   exit( 0 );
}
  

Kommentar

Die Ausgabe dieses Programms hängt von der Fähigkeit des Computers, alle Abschnitte erweitert ab.Wenn alle Abschnitte erweitert werden, wird die Ausgabe im Ausgangsteil wiedergegeben.

.NET Framework-Entsprechung

Nicht zutreffend. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.

Siehe auch

Referenz

Debug- Routinen

_malloc_dbg