Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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