War diese Seite hilfreich?
Ihr Feedback ist uns wichtig. Teilen Sie uns Ihre Meinung mit.
Weiteres Feedback?
1500 verbleibende Zeichen
Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

_expand

Ändert die Größe eines Speicherblocks.

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

memblock

Zeiger auf den zuvor belegten Speicherblock.

size

Neue Größe in Bytes.

_expand gibt ein void-Zeiger zum neu belegten Speicherblock zurück. Im unterschied zu realloc kann _expand ein Block nicht verschieben, um seine Größe zu ändern. Wenn genügend Arbeitsspeicher vorhanden ist, der den Block, zu erweitern ist verfügbar, ohne es zu verschieben, wird der Parameter memblock in _expand dem Rückgabewert.

_expand gibt NULL zurück, wenn ein Fehler während des Vorgangs erkannt wird. Wenn _expand verwendet wird, um einen Speicherblock verkleinert wird, hat er möglicherweise Beschädigung im kleinen Blocksheap oder ein ungültiger Blockszeiger und geben NULL zurück.

Wenn nicht genügend Arbeitsspeicher vorhanden ist, der den Block, der angegebenen Größe zu erweitern ist verfügbar, ohne sie zu verschieben, wird NULL zurückgegeben. _expand gibt nie einem Block zurück, der in eine Größe als kleiner angefordert erweitert wird. Wenn ein Fehler auftritt, gibt errno die Art des Fehlers an. Weitere Informationen zu errno finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.

Der Rückgabewert zeigt auf einen Speicherplatz, für den sichergestellt ist, dass er zum Speichern eines beliebigen Objekttyps ordnungsgemäß ausgerichtet ist. Um die neue Größe des Elements zu überprüfen, verwenden Sie _msize. Um einen Zeiger auf einen anderen Typ als void abzurufen, wenden Sie eine Typumwandlung auf den Rückgabewert an.

Die _expand-Funktion änder die Größe eines zuvor reservierten Speicherblocks durch den Versuch, Vertrag Block zu erweitern oder abzuschließen, ohne seinen Speicherort im Heap zu verschieben. Der memblock-Parameter zeigt auf den Anfang des Blocks. Der size-Parameter gibt die neue Größe des Blocks, in Bytes. Der Inhalt des Blocks entspricht z kürzeren der neuen und den alten Größen unverändert. memblock sollte kein Block liegen, der freigegeben wurde.

Hinweis Hinweis

Auf 64-Bit-Plattformen keiner _expand möglicherweise nicht Vertrag Blocks, wenn die neue Größe kleiner ist, wenn die aktuelle Größe ab; insbesondere wenn der Block kleiner als 16K an Größe und daher in der Fragmentierungs-Heap zugeordnet wurde, schlägt _expand den Block unverändert und gibt memblock zurück.

Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist, wird _expand von _expand_dbg auf. Weitere Informationen darüber, wie der Heap während des Debuggens Prozesses verwaltet, finden Sie unter Der CRT-Debugheap.

Diese Funktion überprüft ihre Parameter. Wenn memblock ein NULL-Zeiger befindet, wird von dieser Funktion ein ungültiger Parameterhandler, wie in Parametervalidierung beschrieben. Wenn die Ausführung fortgesetzt werden darf, wird errno auf EINVAL gesetzt, und die Funktion gibt NULL zurück. Wenn size größer als _HEAP_MAXREQ ist, wird errno auf ENOMEM festgelegt und die Funktion gibt NULL zurück.

Funktion

Erforderlicher Header

_expand

<malloc.h>

Weitere 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 );
}
Reservieren Sie eine Puffergröße mit 512 Elementen zu
Zugeordnet 512 Bytes an 002C12BC
Erweiterter Block zu 1024 Bytes an 002C12BC

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

Community-Beiträge

Anzeigen:
© 2015 Microsoft