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中。