我有以下代码集,在出于某些原因退出该函数之前我无法释放内存。所以我为分配的内存定义一个别名,并在free()函数中使用它,如下面的代码所示,它能正常工作吗?
char *gList = NULL;
void fun(void)
{
u8 count = GetCount();
if (gList != NULL)
{
free(gList);
}
char *list =(char *) malloc ( count * sizeof (char *);
gList = list; //aliase
//some statements
} //End of fun
答案 0 :(得分:3)
它实际上不是“别名”;您只需将一个变量(类型char*
)的值分配给另一个变量(类型char*
)。并且free
将处理内存地址/指针变量的内容,而不是“变量名称”。所以一般情况下这会起作用;
但请注意,您的程序可能仍有一些错误。
语句char *list =(char *) malloc ( count * sizeof (char *);
看起来很可疑,因为您分配count
类型的char*
条目,但结果类型不是char**
(在这种情况下应该是这样)。此外,如果您的列表代表“字符串”,请不要忘记为字符串终止字符分配空间;
可能你的意思是:
char *list = malloc ( (count+1) * sizeof (char) );
或者,因为根据定义,sizeof(char)
为1
:
char *list = malloc ( count + 1 );