c語言 內存釋放

1,一般函數內部定義的變量是在棧上,在函數退出後,被自動釋放。

2,全局和靜態變量,只要你的進程是在main正常返回,也會被釋放。

3,通過malloc/calloc/realloc分配的,則需要手動釋放,free(*pointer);

需要注意的一點是,如果在dll中定義的,這必須要在dll中定義一個釋放的方法。否則不能被釋放。

例如:

typedef struct AA{

int a;

char * b;

} aa

佔用的內存空間爲int爲4位,char*因爲是指針所以爲4位,共8位。int len = sizeof(aa);即len爲8;

int lenResult = len * n;//n個struct

 aa *p=NULL;p = (aa*)malloc(lenResult);

因爲b也是指針,所以,在賦值時,也要爲b申請空間。

可以總結出一個函數

char* getMemPointer(int num)
{
 return (char*)malloc(sizeof(char)*num);
}

使用就比較簡單了。

釋放的時候,正常的時候,一一釋放。

特殊:

如果在dll中,釋放b所指的空間,需要在dll中另外寫一個專門釋放的函數。

釋放p的話,在調用的地方,還是在dll都可以。建議也放到dll中。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章