Aracılığıyla paylaş


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

Ayrıca bkz.

Bellek ayırma
calloc
free
realloc
_aligned_malloc