Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 voidbir 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 doubleveya 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 __m256ve 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 mallociadesini 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.
mallocENOMEM, bellek ayırmanın başarısız olup olmadığını veya istenen bellek miktarının aşılıp aşılmadığını _HEAP_MAXREQolarak ayarlarerrno. Bu ve diğer hata kodları hakkında bilgi için bkz. errno, _doserrno, _sys_errlistve _sys_nerr.
Başlangıç kodu, , envpve argv değişkenleri için depolama ayırmak için _environkullanı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 mallocyeni işleyici modunu ayarlar. Yeni işleyici modu, hata malloc durumunda tarafından _set_new_handlerayarlanan 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ı.
mallocve __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