realloc
Realokasi blok memori.
Sintaks
void *realloc(
void *memblock,
size_t size
);
Parameter
memblock
Pointer ke blok memori yang dialokasikan sebelumnya.
size
Ukuran baru dalam byte.
Nilai hasil
realloc
void
mengembalikan pointer ke blok memori yang dialokasikan (dan mungkin dipindahkan).
Jika memori yang tersedia tidak cukup untuk memperluas blok ke ukuran tertentu, blok asli dibiarkan tidak berubah, dan NULL
dikembalikan.
Jika size
nol, maka blok yang menunjuk ke oleh memblock
dibesarkan; nilai yang dikembalikan adalah NULL
, dan memblock
dibiarkan menunjuk pada blok yang dibeberkan.
Nilai pengembalian menunjuk ke ruang penyimpanan yang cocok diselaraskan untuk penyimpanan jenis objek apa pun. Untuk mendapatkan penunjuk ke jenis selain void
, gunakan jenis cast pada nilai yang dikembalikan.
Keterangan
Catatan
realloc
belum diperbarui untuk menerapkan perilaku C17 karena perilaku baru tidak kompatibel dengan sistem operasi Windows.
Fungsi mengubah realloc
ukuran blok memori yang dialokasikan. Argumen memblock
menunjuk ke awal blok memori. Jika memblock
adalah NULL
, realloc
berulah dengan cara yang sama seperti malloc
dan mengalokasikan blok size
byte baru. Jika memblock
bukan NULL
, seharusnya penunjuk yang dikembalikan oleh panggilan sebelumnya ke calloc
, , malloc
atau realloc
.
Argumen size
memberikan ukuran baru blok, dalam byte. Konten blok tidak berubah hingga lebih pendek dari ukuran baru dan lama, meskipun blok baru dapat berada di lokasi yang berbeda. Karena blok baru dapat berada di lokasi memori baru, penunjuk yang dikembalikan realloc
oleh tidak dijamin sebagai penunjuk yang melewati memblock
argumen. realloc
tidak nol memori yang baru dialokasikan jika ada pertumbuhan buffer.
realloc
errno
diatur ke ENOMEM
jika alokasi memori gagal atau jika jumlah memori yang diminta melebihi _HEAP_MAXREQ
. Untuk informasi tentang kode kesalahan ini dan lainnya, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
realloc
malloc
panggilan untuk menggunakan fungsi C++ _set_new_mode
untuk mengatur mode handler baru. Mode handler baru menunjukkan apakah, jika gagal, malloc
adalah memanggil rutinitas handler baru seperti yang ditetapkan oleh _set_new_handler
. Secara default, malloc
tidak memanggil rutinitas handler baru saat gagal mengalokasikan memori. Anda dapat mengambil alih perilaku default ini sehingga, ketika realloc
gagal mengalokasikan memori, malloc
memanggil rutinitas handler baru dengan cara yang sama seperti yang new
dilakukan operator ketika gagal karena alasan yang sama. Untuk mengambil alih default, panggil
_set_new_mode(1);
awal program, atau tautan dengan NEWMODE. OBJ (lihat Opsi tautan).
Ketika aplikasi ditautkan dengan versi debug pustaka run-time C, realloc
diselesaikan ke _realloc_dbg
. Untuk informasi selengkapnya tentang bagaimana tumpukan dikelola selama proses debugging, lihat Tumpukan debug CRT.
realloc
ditandai __declspec(noalias)
dan __declspec(restrict)
, yang berarti bahwa fungsi dijamin tidak memodifikasi variabel global, dan bahwa penunjuk yang dikembalikan tidak diberi alias. Untuk informasi lebih lanjut, lihat noalias
dan restrict
.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
realloc |
<stdlib.h> dan <malloc.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// crt_realloc.c
// This program allocates a block of memory for
// buffer and then uses _msize to display the size of that
// block. Next, it uses realloc to expand the amount of
// memory used by buffer and then calls _msize again to
// display the new amount of memory allocated to buffer.
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
long *buffer, *oldbuffer;
size_t size;
if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
exit( 1 );
size = _msize( buffer );
printf_s( "Size of block after malloc of 1000 longs: %u\n", size );
// Reallocate and show new size:
oldbuffer = buffer; // save pointer in case realloc fails
if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) ))
== NULL )
{
free( oldbuffer ); // free original block
exit( 1 );
}
size = _msize( buffer );
printf_s( "Size of block after realloc of 1000 more longs: %u\n",
size );
free( buffer );
exit( 0 );
}
Size of block after malloc of 1000 longs: 4000
Size of block after realloc of 1000 more longs: 8000
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk