Bagikan melalui


_expand

Mengubah ukuran blok memori.

Sintaks

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

Parameter

memblock
Pointer ke blok memori yang dialokasikan sebelumnya.

size
Ukuran baru dalam byte.

Nilai hasil

_expand mengembalikan penunjuk ke blok memori yang dialokasikan. _expand, tidak seperti realloc, tidak dapat memindahkan blok untuk mengubah ukurannya. Dengan demikian, jika ada cukup memori yang tersedia untuk memperluas blok tanpa memindahkannya, memblock parameter _expand ke sama dengan nilai yang dikembalikan.

_expandNULL mengembalikan ketika kesalahan terdeteksi selama operasinya. Misalnya, jika _expand digunakan untuk menyusutkan blok memori, itu mungkin mendeteksi kerusakan di tumpukan blok kecil atau penunjuk blok yang tidak valid dan mengembalikan NULL.

Jika tidak ada cukup memori yang tersedia untuk memperluas blok tanpa memindahkannya, fungsi akan mengembalikan NULL. _expand tidak pernah mengembalikan blok yang diperluas ke ukuran yang kurang dari yang diminta. Jika kegagalan terjadi, errno menunjukkan sifat kegagalan. Untuk informasi selengkapnya tentang errno, lihat errno, , _sys_errlist_doserrno, dan _sys_nerr.

Nilai pengembalian menunjuk ke ruang penyimpanan yang cocok diselaraskan untuk penyimpanan jenis objek apa pun. Untuk memeriksa ukuran baru item, gunakan _msize. Untuk mendapatkan penunjuk ke jenis selain void, gunakan jenis cast pada nilai yang dikembalikan.

Keterangan

Fungsi mengubah _expand ukuran blok memori yang dialokasikan sebelumnya dengan mencoba memperluas atau mengontrak blok tanpa memindahkan lokasinya di timbunan. Parameter memblock menunjuk ke awal blok. Parameter size memberikan ukuran baru blok, dalam byte. Konten blok tidak berubah hingga lebih pendek dari ukuran baru dan lama. memblock seharusnya bukan blok yang telah dibebaskan.

Catatan

Pada platform 64-bit, _expand mungkin tidak mengontrak blok jika ukuran baru kurang dari ukuran saat ini; khususnya, jika ukuran blok kurang dari 16K dan oleh karena itu dialokasikan dalam Tumpukan Fragmentasi Rendah, _expand membuat blok tidak berubah dan mengembalikan memblock.

Ketika aplikasi ditautkan dengan versi debug pustaka run-time C, _expand diselesaikan ke _expand_dbg. Untuk informasi selengkapnya tentang bagaimana tumpukan dikelola selama proses debugging, lihat Tumpukan debug CRT.

Fungsi ini memvalidasi parameternya. Jika memblock adalah penunjuk null, fungsi ini memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, errno diatur ke EINVAL dan fungsi mengembalikan NULL. Jika size lebih besar dari _HEAP_MAXREQ, errno diatur ke ENOMEM, dan fungsi mengembalikan NULL.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Fungsi Header yang diperlukan
_expand <malloc.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// 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

Lihat juga

Alokasi memori
calloc
free
malloc
_msize
realloc