malloc
Bellek blokları ayırır.
Sözdizimi
void *malloc(
size_t size
);
Parametreler
size
Ayrılacak bayt sayısı.
Dönüş değeri
malloc
ayrılan alana geçersiz bir işaretçi döndürür veya NULL
kullanılabilir bellek yetersizse. dışında void
bir türe işaretçi döndürmek için dönüş değerinde tür ataması kullanın. Dönüş değerinin işaret ettiği depolama alanı, temel hizalamadan daha küçük veya buna eşit bir hizalama gereksinimi olan herhangi bir nesne türünün depolaması için uygun şekilde hizalanır. (Visual C++'da temel hizalama, bir double
veya 8 bayt için gereken hizalamadır. 64 bit platformları hedefleyen kodda 16 bayttır.) Daha büyük bir hizalama gereksinimine sahip nesneler için depolama alanı ayırmak için kullanın_aligned_malloc
; örneğin, SSE türleri __m128
ve __m256
ve 8'den büyük bir yer n
kullanılarak __declspec(align( n ))
bildirilen türler. 0 ise size
, malloc
yığında sıfır uzunluklu bir öğe ayırır ve bu öğe için geçerli bir işaretçi döndürür. İstenen bellek miktarı küçük olsa bile her zaman değerinin malloc
iadesini denetleyin.
Açıklamalar
malloc
işlevi en az size
baytlık bir bellek bloğu ayırır. Hizalama ve bakım bilgileri için gereken alan nedeniyle blok bayttan size
büyük olabilir.
malloc
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
.
Başlangıç kodu, , envp
ve argv
değişkenleri için depolama ayırmak için _environ
kullanırmalloc
. Aşağıdaki işlevler ve bunların geniş karakterli karşılıkları da öğesini çağırır malloc
.
C++ _set_new_mode
işlevi için malloc
yeni işleyici modunu ayarlar. Yeni işleyici modu, hata malloc
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, malloc
bellek ayırma hatasında yeni işleyici yordamını çağırmaz. Bu varsayılan davranışı geçersiz kılarak bellek malloc
ayrılamaması durumunda malloc
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, programınızda erken çağrı yapın _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, malloc
olarak _malloc_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ı ayrıntıları.
malloc
ve __declspec(restrict)
olarak işaretlenir__declspec(noalias)
. Bu öznitelikler, işlevin genel değişkenleri değiştirmemesi garantili olduğu ve döndürülen işaretçinin diğer adla birleştirilmediğ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 |
---|---|
malloc |
<stdlib.h> ve <malloc.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Kitaplıklar
C çalışma zamanı kitaplıklarının tüm sürümleri.
Örnek
// crt_malloc.c
// This program allocates memory with
// malloc, then frees the memory with free.
#include <stdlib.h> // For _MAX_PATH definition
#include <stdio.h>
#include <malloc.h>
int main( void )
{
char *string;
// Allocate space for a path name
string = malloc( _MAX_PATH );
// In a C++ file, explicitly cast malloc's return. For example,
// string = (char *)malloc( _MAX_PATH );
if( string == NULL )
printf( "Insufficient memory available\n" );
else
{
printf( "Memory space allocated for path name\n" );
free( string );
printf( "Memory freed\n" );
}
}
Memory space allocated for path name
Memory freed