Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

C Alokasi Memori Dinamis

Alokasi Memori Dinamis C

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

Seperti yang Anda ketahui, array adalah kumpulan dari sejumlah nilai yang 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 mengalokasikan memori secara dinamis, fungsi library adalah malloc() , calloc() , realloc() dan free() digunakan. Fungsi-fungsi ini didefinisikan dalam <stdlib.h> file header.


C malloc()

Nama "malloc" adalah singkatan dari alokasi memori.

malloc() fungsi cadangan blok memori dari jumlah byte yang ditentukan. Dan, ia mengembalikan pointer void yang dapat dicor menjadi pointer dalam bentuk apa pun.


Sintaks malloc()

ptr = (castType*) malloc(size);

Contoh

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

Pernyataan di atas mengalokasikan 400 byte memori. Itu karena ukuran float adalah 4 byte. Dan, penunjuk ptr menyimpan alamat byte pertama dalam memori yang dialokasikan.

Ekspresi menghasilkan NULL pointer jika memori tidak dapat dialokasikan.


C calloc()

Nama "calloc" adalah singkatan dari contiguous alokasi.

malloc() fungsi mengalokasikan memori dan membiarkan memori tidak diinisialisasi, 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 calloc() atau malloc() tidak dibebaskan dengan sendirinya. Anda harus secara eksplisit menggunakan free() untuk melepaskan ruang.


Sintaks gratis()

free(ptr);

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


Contoh 1:malloc() dan free()

// Program to calculate the sum of n numbers entered by the user

#include <stdio.h>
#include <stdlib.h>

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;
}

Keluaran

Enter number of elements: 3
Enter elements: 100
20
36
Sum = 156

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


Contoh 2:calloc() dan free()

// Program to calculate the sum of n numbers entered by the user

#include <stdio.h>
#include <stdlib.h>

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;
}

Keluaran

Enter number of elements: 3
Enter elements: 100
20
36
Sum = 156

C realloc()

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


Sintaks realloc()

ptr = realloc(ptr, x);

Di sini, ptr dialokasikan kembali dengan ukuran baru x .


Contoh 3:realloc()

#include <stdio.h>
#include <stdlib.h>

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:\n");
  for(i = 0; i < n1; ++i)
    printf("%pc\n",ptr + i);

  printf("\nEnter the new size: ");
  scanf("%d", &n2);

  // rellocating the memory
  ptr = realloc(ptr, n2 * sizeof(int));

  printf("Addresses of newly allocated memory:\n");
  for(i = 0; i < n2; ++i)
    printf("%pc\n", ptr + i);
  
  free(ptr);

  return 0;
}

Keluaran

Enter size: 2
Addresses of previously allocated memory:
26855472
26855476

Enter the new size: 4
Addresses of newly allocated memory:
26855472
26855476
26855480
26855484

Bahasa C

  1. Memori Hanya-Baca (ROM)
  2. Mikroprosesor
  3. Manajemen Memori C++:baru dan hapus
  4. Cervoz meningkatkan memori DDR4-2666 generasi berikutnya
  5. C++ Alokasi Dinamis Array dengan Contoh
  6. calloc() Fungsi di C Library dengan Program CONTOH
  7. realloc() Fungsi di C Library:Bagaimana cara menggunakannya? Sintaks &Contoh
  8. C - Manajemen Memori
  9. Penetapan Harga Dinamis dalam Ritel Tradisional Tidak Dapat Dihindari
  10. Memori Dinamis C++