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