歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言 - 動態分配內存

C語言 - 動態分配內存

日期:2017/3/1 10:18:02   编辑:Linux編程

  所謂C語言動態內存分配就是指在程序執行的過程中動態地分配或者回收存儲空間的分配內存的方法。動態內存分配不象數組等靜態內存分配方法那樣需要預先分配存儲空間,而是由系統根據程序的需要即時分配,且分配的大小就是程序要求的大小。從以上動、靜態內存分配比較可以知道動態內存分配相對於景泰內存分配的特點:

  1、不需要預先分配存儲空間;

  2、分配的空間可以根據程序的需要擴大或縮小。

malloc函數的原型為:

  void *malloc (unsigned int size)

  其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。還有一點必須注意的是,當函數未能成功分配存儲空間(如內存不足)就會返回一個NULL指針。所以在調用該函數時應該檢測返回值是否為NULL並執行相應的操作。

free函數

  由於內存區域總是有限的,不能不限制地分配下去,而且一個程序要盡量節省資源,所以當所分配的內存區域不用時,就要釋放它,以便其它的變量或者程序使用。這時我們就要用到free函數。

  其函數原型是:

  void free(void *p)

  作用是釋放指針p所指向的內存區。

  其參數p必須是先前調用malloc函數或calloc函數(另一個動態分配存儲區域的函數)時返回的指針。給free函數傳遞其它的值很可能造成死機或其它災難性的後果。

代碼:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main() {
  5. char *p;
  6. p = (char *)malloc(100000*sizeof(char)); //定義一個動態內存
  7. scanf("%s", p);
  8. printf("%s%d", p, strlen(p));
  9. free(p); //釋放內存
  10. system("pause");
  11. return 0;
  12. }
Copyright © Linux教程網 All Rights Reserved