calloc
0'a başlatılan öğelerle bellekte bir dizi ayırır.
Sözdizimi
void *calloc(
size_t number,
size_t size
);
Parametreler
number
Öğe sayısı.
size
Her öğenin bayt cinsinden uzunluğu.
Dönüş değeri
calloc
ayrılan alana bir işaretçi döndürür. Dönüş değerinin işaret ettiği depolama alanı, herhangi bir nesne türünün depolaması için uygun şekilde hizalanır. dışında void
bir türe işaretçi almak için dönüş değerinde tür tür ataması kullanın.
Açıklamalar
calloc
işlevi, her biri uzunluk size
baytları olan number
bir öğe dizisi için depolama alanı ayırır. Her öğe 0 olarak başlatılır.
calloc
ENOMEM
, bellek ayırmanın başarısız olup olmadığını veya istenen bellek miktarının aşılıp aşılmadığını _HEAP_MAXREQ
olarak ayarlarerrno
. Bu ve diğer hata kodları hakkında bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Microsoft uygulamasında sıfır ise veya size
sıfır isenumber
, calloc
sıfır olmayan boyutta ayrılmış bir bloğun işaretçisini döndürür. Döndürülen işaretçiyi okuma veya yazma girişimi tanımsız davranışa yol açar.
calloc
yeni işleyici modunu ayarlamak için C++ _set_new_mode
işlevini kullanır. Yeni işleyici modu, hata calloc
durumunda tarafından _set_new_handler
ayarlanan yeni işleyici yordamının çağrılıp çağrılmayacağını belirtir. Varsayılan olarak, calloc
bellek ayırma hatasında yeni işleyici yordamını çağırmaz. Bu varsayılan davranışı calloc
geçersiz kılarak bellek ayıramazsa yeni işleyici yordamını işlecin aynı nedenden dolayı başarısız olduğu gibi new
çağırmasını sağlayabilirsiniz. Varsayılanı geçersiz kılmak için
_set_new_mode(1);
veya ile NEWMODE.OBJ
bağlantı oluşturun (bkz . Bağlantı seçenekleri).
Uygulama C çalışma zamanı kitaplıklarının hata ayıklama sürümüyle bağlandığında, calloc
olarak _calloc_dbg
çözümlenir. Yığın hata ayıklama işlemi sırasında nasıl yönetilir hakkında daha fazla bilgi için bkz . CRT hata ayıklama yığını.
calloc
ve __declspec(restrict)
olarak işaretlenir__declspec(noalias)
, başka bir deyişle işlevin genel değişkenleri değiştirmemesi garanti edilir ve döndürülen işaretçinin diğer adla işaretlenmediği anlamına gelir. Daha fazla bilgi için bkz. noalias
ve restrict
.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Gereksinimler
Yordam | Gerekli başlık |
---|---|
calloc |
<stdlib.h> ve <malloc.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// 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