_expand

 

Veröffentlicht: Juli 2016

Die neueste Dokumentation zu Visual Studio 2017 finden Sie unter Dokumentation zu Visual Studio 2017.

Ändert die Größe eines Speicherblocks.

void *_expand(   
   void *memblock,  
   size_t size   
);  

Parameter

memblock
Zeiger zum vorherigen belegten Speicherblock.

size
Neue Größe in Bytes.

_expandGibt einen void-Zeiger auf den neu belegten Speicherblock zurück. _expand, im Gegensatz zu realloc, einen Block, dessen Größe ändern kann nicht verschoben werden. Also, wenn es genügend Arbeitsspeicher verfügbar, um den Block zu erweitern, ohne zu verschieben, die memblock Parameter _expand entspricht der Rückgabewert.

_expandGibt NULL Wenn ein Fehler während des Betriebs erkannt wird. Zum Beispiel wenn _expand wird verwendet, um einen Speicherblock zu verkleinern, kann er eine Beschädigung in der Heap kleiner Block oder ein ungültiger Zeiger erkennen und zurückgeben NULL.

Wenn es nicht genügend Arbeitsspeicher verfügbar ist, um den Block an die angegebene Größe zu erweitern, ohne es zu verschieben, gibt die Funktion NULL. _expandeinen Block, der kleiner als die angeforderte Größe erweitert nie zurückgegeben. Wenn ein Fehler auftritt, errno die Art des Fehlers angibt. Weitere Informationen zu errno, finden Sie unter Errno, _doserrno, _sys_errlist und _sys_nerr.

Der Rückgabewert zeigt auf einen Speicherplatz, der für die Speicherung eines beliebigen Objekttyps geeignet ist. Um die neue Größe des Elements zu überprüfen, verwenden Sie _msize. Um einen Zeiger auf einem Typ als void, verwenden Sie eine Typumwandlung für den Rückgabewert.

Die _expand -Funktion ändert die Größe des vorherigen belegten Speicherblock durch Erweitern oder verkleinern den Block, ohne den Speicherort im Heap verschieben möchten. Die memblock Parameter verweist auf den Anfang des Blocks. Die size Parameter gibt die neue Größe des Blocks, in Bytes an. Der Inhalt des Blocks bleiben unverändert, bis die kürzere der alten und neuen Größen. memblocksollte kein Block, der freigegeben wurde.

System_CAPS_ICON_note.jpg Hinweis

Auf 64-Bit-Plattformen _expand den Block kann keinen Vertrag, wenn die neue Größe kleiner als die aktuelle Größe; insbesondere, ist wenn der Block kleiner als 16 KB wurde und deshalb in niedrige Heap-Fragmentierung, reserviert _expand bewirkt, dass den Block nicht geändert, und gibt memblock.

Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist _expand löst in _expand_dbg. Weitere Informationen dazu, wie der Heap während des Debugprozesses verwaltet wird, finden Sie unter der CRT-Debugheap.

Diese Funktion überprüft ihre Parameter. Wenn memblock null-Zeiger, ruft diese Funktion einen Handler für ungültige Parameter aus, wie in beschrieben Parametervalidierung. Wenn die weitere Ausführung zugelassen wird, wird errno auf EINVAL gesetzt, und die Funktion gibt NULLzurück. Wenn size ist größer als _HEAP_MAXREQ, errno Wert ENOMEM und gibt die Funktion NULL.

FunktionErforderlicher Header
_expand<malloc.h>

Zusätzliche Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.

// crt_expand.c  
  
#include <stdio.h>  
#include <malloc.h>  
#include <stdlib.h>  
  
int main( void )  
{  
   char *bufchar;  
   printf( "Allocate a 512 element buffer\n" );  
   if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )  
      exit( 1 );  
   printf( "Allocated %d bytes at %Fp\n",   
         _msize( bufchar ), (void *)bufchar );  
   if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )  
      printf( "Can't expand" );  
   else  
      printf( "Expanded block to %d bytes at %Fp\n",   
            _msize( bufchar ), (void *)bufchar );  
   // Free memory   
   free( bufchar );  
   exit( 0 );  
}  

Allocate a 512 element buffer  
Allocated 512 bytes at 002C12BC  
Expanded block to 1024 bytes at 002C12BC  

Nicht zutreffend. Mit PInvokerufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Speicherbelegung
calloc
frei
"malloc"
_msize
realloc

Anzeigen: