malloc

Bellek bloklarını ayırır.

void *malloc(
   size_t size 
);

Parametreler

  • size
    Ayrılacak bayt sayısı.

Dönüş Değeri

malloc ayrılan alana void bir işaretçi döndürür veya yetersiz bellek varsa NULL .Bir işaretçiyi void dışında bir türe döndürmek için, dönüş değeri üzerinde bir tür ataması kullanın.Dönüş değeri tarafından işaret edilen depolama alanının, temel hizalamadan az veya ona eşit hizalama gereksinimleri bulunan her nesne türü için uygun şekilde hizalanması garanti edilir. (Visual C++'da temel hizalama, double veya 8 bayt için gerekli olan hizalamadır.64-Bit platformları hedefleyen kodda bu, 16 bayttır.) Daha geniş bir hizalama gereksinimi olan (örneğin, __m128 ve __m256 türünden SSE türleri) nesnelerle ve __declspec(align(n)) kullanarak bildirilen türlerle (burada n 8'den büyüktür) depoyu ayırmak için _aligned_malloc kullanın.size 0 ise, malloc sıfır uzunluklu öğeyi yığınına atar ve bu öğeye geçerli bir işaretçi döndürür.İstenen bellek miktarı azsa malloc öğesinden dönüşü her zaman denetleyin.

Notlar

malloc işlevi en az size baytlık bir bellek bloğu ayırır.Blok, hizalama ve bakım bilgileri için gerekli alandan dolayı size bayttan daha büyük olabilir.

malloc, errno değerini ENOMEM olarak ayarlar; bellek ayırma başarısız olursa veya istenen bellek _HEAP_MAXREQ miktarını aşıyorsa.Bu hata kodu ve diğer hata kodları hakkında bilgi için bkz. errno, _doserrno, _sys_errlist, and _sys_nerr.

Başlangıç kodu; _environ, envp ve argv değişkenleri için depolama alanı ayırmak üzere malloc öğesini kullanır.Aşağıdaki işlevler ve geniş karakter karşılıkları malloc öğesini de çağırır.

calloc

fscanf

_getw

setvbuf

_exec işlevleri

fseek

_popen

_spawn işlevleri

fgetc

fsetpos

printf

_strdup

_fgetchar

_fullpath

putc

sistem

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

puts

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

alır

_searchenv

 

C++ _set_new_mode işlevi, malloc için yeni işleyici modunu ayarlar.Yeni işleyici modu, hata durumunda, malloc öğesinin _set_new_handler ile ayarlanmış olan yeni işleyici rutinini çağırıp çağırmayacağını belirtir.Varsayılan olarak, malloc bellek dağıtma hatasında yeni işleyici rutinini çağırmaz.Bu varsayılan davranışı geçersiz kılabilirsiniz; böylece, bellek ayırmada malloc başarısız olduğunda malloc yeni işleyici rutinini, aynı nedenlerle başarısız olduğunda new işlecinin yaptığı aynı şekilde çağırır.Varsayılan geçersiz kılmak için, çağırın

_set_new_mode(1)

programınızda ya da NEWMODE.OBJ ile bağlantıda daha önce (bkz. Bağlantı Seçenekleri).

Uygulama hata ayıklama sürümü C çalışma zamanı kitaplıklarıyla bağlandığında malloc, _malloc_dbg olarak çözümlenir.Yığının hata ayıklama işlemi sırasında nasıl yönetildiği hakkında daha fazla bilgi için bkz. CRT Hata Ayıklama Öbeği Ayrıntıları.

malloc, __declspec(noalias) ve __declspec(restrict) ile işaretlenmiş; bu, işlevin genel değişkenleri değiştirmeyeceği ve döndürülen işaretçiye başka ad verilmemiş olduğunu garantilediği anlamına gelir.Daha fazla bilgi için, bkz. noalias ve restrict.

Gereksinimler

Yordam

Gerekli başlık

malloc

<stdlib.h> ve <malloc.h>

Ek uyumluluk bilgileri için bkz. Uyumluluk.

Kitaplıklar

C çalışma zamanı kitaplıklarının çoklu iş parçacığı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" );
   }
}
  

.NET Framework Eşdeğeri

Uygulanamaz. Standart C işlevini çağırmak için PInvoke kullanın. Daha fazla bilgi için bkz. Platform Çağırma Örnekleri.

Ayrıca bkz.

Başvuru

Bellek Ayırma

calloc

serbest

realloc

_aligned_malloc