Bagikan melalui


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.

mallocerrno 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 _environvariabel , , envpdan 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

Lihat juga

Alokasi memori
calloc
free
realloc
_aligned_malloc