malloc
Mengalokasikan blok memori.
Sintaks
void *malloc(
size_t size
);
Parameter
size
Byte untuk dialokasikan.
Nilai kembali
malloc
mengembalikan penunjuk ke ruang yang dialokasikan, atau NULL
jika memori yang tersedia tidak mencukuum. Untuk mengembalikan penunjuk ke jenis selain void
, gunakan jenis transmisi 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 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 informasi penyelarasan dan 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, pada kegagalan, malloc
adalah memanggil rutinitas handler baru sebagaimana diatur 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, hubungi _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 diberi 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 dibutuhkan |
---|---|
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