malloc
Mengalokasikan blok memori.
Sintaks
void *malloc(
size_t size
);
Parameter
size
Byte untuk mengalokasikan.
Nilai hasil
malloc
mengembalikan penunjuk ke ruang yang dialokasikan, atau NULL
jika tidak ada cukup memori yang tersedia. Untuk mengembalikan pointer ke jenis selain void
, gunakan jenis cast pada nilai yang dikembalikan. Ruang penyimpanan yang ditunjukkan oleh nilai pengembalian cocok diselaraskan untuk penyimpanan jenis objek apa pun yang memiliki persyaratan perataan kurang dari atau sama dengan perataan dasar. (Di Visual C++, perataan dasar adalah perataan yang diperlukan untuk double
, atau 8 byte. Dalam kode yang menargetkan platform 64-bit, itu adalah 16 byte.) Gunakan _aligned_malloc
untuk mengalokasikan penyimpanan untuk objek yang memiliki persyaratan perataan yang lebih besar—misalnya, jenis __m128
SSE dan __m256
, dan jenis yang dideklarasikan dengan menggunakan __declspec(align( n ))
di mana n
lebih besar dari 8. Jika size
adalah 0, malloc
mengalokasikan item panjang nol dalam heap dan mengembalikan penunjuk yang valid ke item tersebut. Selalu periksa pengembalian dari malloc
, bahkan jika jumlah memori yang diminta kecil.
Keterangan
Fungsi ini malloc
mengalokasikan blok memori setidaknya size
byte. Blok mungkin lebih besar dari size
byte karena ruang yang diperlukan untuk menyelaraskan dan informasi pemeliharaan.
malloc
errno
diatur ke ENOMEM
jika alokasi memori gagal atau jika jumlah memori yang diminta melebihi _HEAP_MAXREQ
. Untuk informasi tentang ini dan kode kesalahan lainnya, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
Kode startup menggunakan malloc
untuk mengalokasikan penyimpanan untuk _environ
variabel , , envp
dan argv
. Fungsi berikut dan rekan-rekan karakter lebarnya juga memanggil malloc
.
Fungsi C++ _set_new_mode
mengatur mode handler baru untuk malloc
. Mode handler baru menunjukkan apakah, jika gagal, malloc
adalah memanggil rutinitas handler baru seperti yang ditetapkan oleh _set_new_handler
. Secara default, malloc
tidak memanggil rutinitas handler baru saat gagal mengalokasikan memori. Anda dapat mengambil alih perilaku default ini sehingga, ketika malloc
gagal mengalokasikan memori, malloc
memanggil rutinitas handler baru dengan cara yang sama seperti yang new
dilakukan operator ketika gagal karena alasan yang sama. Untuk mengambil alih default, panggil _set_new_mode(1)
di awal program Anda, atau tautkan dengan NEWMODE.OBJ
(lihat Opsi tautan).
Ketika aplikasi ditautkan dengan versi debug pustaka run-time C, malloc
diselesaikan ke _malloc_dbg
. Untuk informasi selengkapnya tentang bagaimana tumpukan dikelola selama proses penelusuran kesalahan, lihat Detail tumpukan debug CRT.
malloc
ditandai __declspec(noalias)
dan __declspec(restrict)
. Atribut ini berarti bahwa fungsi dijamin tidak memodifikasi variabel global, dan bahwa penunjuk yang dikembalikan tidak dijamin alias. Untuk informasi lebih lanjut, lihat noalias
dan restrict
.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
malloc |
<stdlib.h> dan <malloc.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Pustaka
Semua versi pustaka run-time C.
Contoh
// 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