指针别名是否在C中的free()函数内工作

时间:2018-04-14 19:49:51

标签: c pointers heap

我有以下代码集,在出于某些原因退出该函数之前我无法释放内存。所以我为分配的内存定义一个别名,并在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

1 个答案:

答案 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 );