使用free()函数的问题

时间:2011-06-23 09:34:59

标签: c linux free

我有一个经常使用char *str[xx]工作人员的C程序。 一些字符串使用赋值运算符(=)填充,无需释放。 但是其他一些(在同一个数组中)使用strdup()填充,需要在程序结束时释放:

  

char * str [10];

     

STR [1] = “您好”;

     

STR [K] =的strdup( “HI”);

两个字符串指针都是非空,释放str [i]自然会产生“seg fault”。 我的问题是,在我的程序结束时,我没有跟踪哪个指针指向strdup()生成的字符串。你可以帮助我找到strdup生成的字符串,以便我可以释放它们吗? 谢谢

3 个答案:

答案 0 :(得分:6)

不幸的是,没有语言功能可以(便携地)区分指向动态分配内存的指针和不指向内存的指针。您可以手动保留动态分配的索引列表。或者,如果性能不是一个很大的问题,请选择总是在堆上进行分配。

答案 1 :(得分:0)

也许您可以使用命名约定来帮助您记住哪个是:

char *str[10];
char *str_p[10];

str[i]="Hi";

str_p[k]=strdup("hi");

(或使用带有指针和标志的结构,表明该特定指针是动态分配的)

答案 2 :(得分:0)

处理此问题的正确方法是通过malloc()strdup()跟踪动态分配的内容。

您必须重构您的计划才能实现这一目标。