C Alokasi Memori Dinamis Menggunakan malloc (), calloc (), free () & realloc ()

Dalam tutorial ini, Anda akan belajar mengalokasikan memori secara dinamis dalam program C Anda menggunakan fungsi library standar: malloc (), calloc (), free () dan realloc ().

Seperti yang Anda ketahui, array adalah kumpulan dari sejumlah nilai tetap. Setelah ukuran array dideklarasikan, Anda tidak dapat mengubahnya.

Terkadang ukuran array yang Anda nyatakan mungkin tidak mencukupi. Untuk mengatasi masalah ini, Anda dapat mengalokasikan memori secara manual selama run-time. Ini dikenal sebagai alokasi memori dinamis dalam pemrograman C.

Untuk secara dinamis mengalokasikan memori, fungsi perpustakaan adalah malloc(), calloc(), realloc()dan free()digunakan. Fungsi-fungsi ini ditentukan di file header.

C malloc ()

Nama "malloc" adalah singkatan dari alokasi memori.

The malloc()fungsi cadangan blok memori dari jumlah tertentu byte. Dan, itu mengembalikan penunjuk voidyang dapat dicor menjadi penunjuk dalam bentuk apa pun.

Sintaks malloc ()

 ptr = (castType*) malloc(size);

Contoh

 ptr = (float*) malloc(100 * sizeof(float));

Pernyataan di atas mengalokasikan memori 400 byte. Itu karena ukurannya float4 byte. Dan, pointer ptr menyimpan alamat dari byte pertama dalam memori yang dialokasikan.

Ekspresi menghasilkan NULLpointer jika memori tidak dapat dialokasikan.

C calloc ()

Nama "calloc" berarti alokasi yang berdekatan.

The malloc()mengalokasikan fungsi memori dan daun memori uninitialized. Sedangkan, calloc()fungsi mengalokasikan memori dan menginisialisasi semua bit ke nol.

Sintaks calloc ()

 ptr = (castType*)calloc(n, size);

Contoh:

 ptr = (float*) calloc(25, sizeof(float));

Pernyataan di atas mengalokasikan ruang yang berdekatan dalam memori untuk 25 elemen tipe float.

C gratis ()

Memori yang dialokasikan secara dinamis dibuat dengan salah satu calloc()atau malloc()tidak dibebaskan sendiri. Anda harus secara eksplisit menggunakan free()untuk melepaskan ruang.

Sintaks bebas ()

 free(ptr);

Pernyataan ini membebaskan ruang yang dialokasikan dalam memori yang ditunjuk oleh ptr.

Contoh 1: malloc () dan free ()

 // Program to calculate the sum of n numbers entered by the user #include #include int main() ( int n, i, *ptr, sum = 0; printf("Enter number of elements: "); scanf("%d", &n); ptr = (int*) malloc(n * sizeof(int)); // if memory cannot be allocated if(ptr == NULL) ( printf("Error! memory not allocated."); exit(0); ) printf("Enter elements: "); for(i = 0; i < n; ++i) ( scanf("%d", ptr + i); sum += *(ptr + i); ) printf("Sum = %d", sum); // deallocating the memory free(ptr); return 0; ) 

Di sini, kami telah mengalokasikan memori secara dinamis untuk sejumlah n int.

Contoh 2: calloc () dan free ()

 // Program to calculate the sum of n numbers entered by the user #include #include int main() ( int n, i, *ptr, sum = 0; printf("Enter number of elements: "); scanf("%d", &n); ptr = (int*) calloc(n, sizeof(int)); if(ptr == NULL) ( printf("Error! memory not allocated."); exit(0); ) printf("Enter elements: "); for(i = 0; i < n; ++i) ( scanf("%d", ptr + i); sum += *(ptr + i); ) printf("Sum = %d", sum); free(ptr); return 0; ) 

C realoc ()

Jika memori yang dialokasikan secara dinamis tidak mencukupi atau lebih dari yang dibutuhkan, Anda dapat mengubah ukuran memori yang dialokasikan sebelumnya menggunakan realloc()fungsi tersebut.

Sintaks realoc ()

 ptr = realloc(ptr, x);

Di sini, ptr dialokasikan kembali dengan ukuran x baru.

Contoh 3: realloc ()

 #include #include int main() ( int *ptr, i , n1, n2; printf("Enter size: "); scanf("%d", &n1); ptr = (int*) malloc(n1 * sizeof(int)); printf("Addresses of previously allocated memory: "); for(i = 0; i < n1; ++i) printf("%u",ptr + i); printf("Enter the new size: "); scanf("%d", &n2); // rellocating the memory ptr = realloc(ptr, n2 * sizeof(int)); printf("Addresses of newly allocated memory: "); for(i = 0; i < n2; ++i) printf("%u", ptr + i); free(ptr); return 0; )

Saat Anda menjalankan program, hasilnya adalah:

 Masukkan ukuran: 2 Alamat memori yang dialokasikan sebelumnya: 26855472 26855476 Masukkan ukuran baru: 4 Alamat memori yang baru dialokasikan: 26855472 26855476 26855480 26855484

Artikel yang menarik...