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