Computer >> Máy Tính >  >> Lập trình >> lập trình C

Malloc trong ngôn ngữ C là gì?

Hàm cấp phát bộ nhớ thư viện C void * malloc (size_t size) cấp phát bộ nhớ được yêu cầu và trả về một con trỏ cho nó.

Chức năng cấp phát bộ nhớ

Bộ nhớ có thể được cấp phát theo hai cách như được giải thích bên dưới -

Malloc trong ngôn ngữ C là gì?

Khi bộ nhớ được cấp phát tại thời điểm biên dịch, nó không thể thay đổi trong quá trình thực thi. Sẽ có vấn đề về sự thiếu hụt hoặc lãng phí bộ nhớ.

Giải pháp là tạo bộ nhớ động, tức là theo yêu cầu của người dùng trong quá trình thực thi chương trình.

Các chức năng thư viện tiêu chuẩn được sử dụng để quản lý bộ nhớ động như sau -

  • malloc ()
  • calloc ()
  • realloc ()
  • miễn phí ()

Hàm Malloc ()

Hàm này được sử dụng để cấp phát một khối bộ nhớ theo byte trong thời gian chạy. Nó trả về một con trỏ void, trỏ đến địa chỉ cơ sở của bộ nhớ được cấp phát.

Cú pháp cho malloc () như sau -

void *malloc (size in bytes)

Ví dụ 1

Ví dụ sau cho thấy cách sử dụng hàm malloc ().

int *ptr;
ptr = (int * ) malloc (1000);
int *ptr;
ptr = (int * ) malloc (n * sizeof (int));

Lưu ý - Nó trả về NULL, nếu bộ nhớ không MIỄN PHÍ.

Chương trình mẫu

Dưới đây là chương trình C để chứng minh chức năng cấp phát bộ nhớ động - malloc ().

#include<stdio.h>
#include<stdlib.h>
void main(){
   //Declaring variables and pointer//
   int numofele,i;
   int *p;
   //Reading elements as I/p//
   printf("Enter the number of elements in the array: ");
   scanf("%d",&numofele);
   //Declaring malloc function//
   p = (int *)malloc(numofele * (sizeof(int)));
   //Reading elements into array of pointers//
   for(i=0;i<numofele;i++){
      p[i]=i+1;
      printf("Element %d of array is : %d\n",i,p[i]);
   }
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

Enter the number of elements in the array: 4
Element 0 of array is : 1
Element 1 of array is : 2
Element 2 of array is : 3
Element 3 of array is : 4

Ví dụ 2

Sau đây là chương trình C để hiển thị các phần tử sử dụng chức năng cấp phát bộ nhớ động -

Năm khối đầu tiên phải trống, năm khối thứ hai phải có logic.

#include<stdio.h>
#include<stdlib.h>
void main(){
   //Declaring variables and pointers,sum//
   int numofe,i,sum=0;
   int *p;
   //Reading number of elements from user//
   printf("Enter the number of elements : ");
   scanf("%d",&numofe);
   //Calling malloc() function//
   p=(int *)malloc(numofe*sizeof(int));
   /*Printing O/p -
   We have to use if statement because we have to check if memory
   has been successfully allocated/reserved or not*/
   if (p==NULL){
      printf("Memory not available");
      exit(0);
   }
   //Printing elements//
   printf("Enter the elements : \n");
   for(i=0;i<numofe;i++){
      scanf("%d",p+i);
      sum=sum+*(p+i);
   }
   printf("\nThe sum of elements is %d",sum);
   free(p);//Erase first 2 memory locations//
   printf("\nDisplaying the cleared out memory location : \n");
   for(i=0;i<numofe;i++){
      printf("%d\n",p[i]);//Garbage values will be displayed//
   }
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

Enter the number of elements : 5
Enter the elements :
12
10
24
45
67
The sum of elements is 158
Displaying the cleared out memory location :
7804032
0
7799120
0
67