Bagikan melalui


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

reallocvoid 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, , mallocatau 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.

reallocerrno 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.

reallocmalloc 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

Alokasi memori
calloc
free
malloc