Trang

Thứ Tư, 22 tháng 2, 2012

Cấp phát động trong C

Ngôn ngữ C cung cấp cho chúng ta 4 hàm dùng để cấp phát và giải phóng bộ nhớ động, nhằm giải quyết các vấn đề liên quan đến bộ nhớ. Đó là malloc, calloc, reallocfree.
Các hàm này đều nằm trong thư viện stdlib.h
Để biết cách sử dụng các hàm trên ta phải xem nguyên mẫu hàm (prototype) của nó:


1. Trước hết là hàm malloc:
void * malloc ( size_t size );
Hàm này dùng để cấp phát bộ nhớ động với kích thước size.
Ví dụ:  
a=(int)malloc(sizeof(int));
2. Hàm calloc:
void * calloc ( size_t num, size_t size );
Hàm này dùng để cấp phát bộ nhớ động cho một mảng với size_t num là số phần tử của mảng.
3. Hàm realloc:
void * realloc ( void * ptr, size_t size );
Dùng để thay đổi kích thước bộ nhớ đã cấp phát với ptr là địa chỉ của bộ nhớ đã cấp phát và size là kích thước muốn cấp phát lại cho vùng nhớ đó.
4. Hàm free:
void free ( void * ptr );
Dùng để giải phóng vùng nhớ đã cấp phát.
Chương trình ví dụ sử dụng cấp phát và giải phóng bộ nhớ động.
/* calloc example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
  int i,n;
  int * pData;
  printf ("Amount of numbers to be entered: ");
  scanf ("%d",&i);
  pData = (int*) calloc (i,sizeof(int));
  if (pData==NULL) exit (1);
  for (n=0;n<i;n++)
  {
    printf ("Enter number #%d: ",n);
    scanf ("%d",&pData[n]);
  }
  printf ("You have entered: ");
  for (n=0;n<i;n++) printf ("%d ",pData[n]);
  free (pData);
  return 0;
}