calloc

Mengalokasikan array dalam memori dengan elemen yang diinisialisasi ke 0.

Sintaks

void *calloc(
   size_t number,
   size_t size
);

Parameter

number
Jumlah elemen.

size
Panjang dalam byte dari setiap elemen.

Nilai hasil

calloc mengembalikan penunjuk ke spasi yang dialokasikan. Ruang penyimpanan yang diarahkan oleh nilai pengembalian cocok diselaraskan untuk penyimpanan dari semua jenis objek. Untuk mendapatkan penunjuk ke jenis selain void, gunakan jenis cast pada nilai yang dikembalikan.

Keterangan

Fungsi ini calloc mengalokasikan ruang penyimpanan untuk array number elemen, masing-masing byte panjang size . Setiap elemen diinisialisasi ke 0.

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

Dalam implementasi Microsoft, jika number atau size nol, calloc mengembalikan penunjuk ke blok yang dialokasikan dengan ukuran bukan nol. Upaya untuk membaca atau menulis melalui penunjuk yang dikembalikan menyebabkan perilaku yang tidak ditentukan.

calloc menggunakan fungsi C++ _set_new_mode untuk mengatur mode handler baru. Mode handler baru menunjukkan apakah, jika gagal, calloc adalah memanggil rutinitas handler baru seperti yang ditetapkan oleh _set_new_handler. Secara default, calloc tidak memanggil rutinitas handler baru saat gagal mengalokasikan memori. Anda dapat mengambil alih perilaku default ini sehingga, ketika calloc gagal mengalokasikan memori, ia 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);

di awal program Anda, atau tautkan dengan NEWMODE.OBJ (lihat Opsi tautan).

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

calloc 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
calloc <stdlib.h> dan <malloc.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// crt_calloc.c
// This program uses calloc to allocate space for
// 40 long integers. It initializes each element to zero.

#include <stdio.h>
#include <malloc.h>

int main( void )
{
   long *buffer;

   buffer = (long *)calloc( 40, sizeof( long ) );
   if( buffer != NULL )
      printf( "Allocated 40 long integers\n" );
   else
      printf( "Can't allocate memory\n" );
   free( buffer );
}
Allocated 40 long integers

Baca juga

Alokasi memori
free
malloc
realloc