我有一个经常使用char *str[xx]
工作人员的C程序。
一些字符串使用赋值运算符(=)填充,无需释放。
但是其他一些(在同一个数组中)使用strdup()
填充,需要在程序结束时释放:
char * str [10];
STR [1] = “您好”;
STR [K] =的strdup( “HI”);
两个字符串指针都是非空,释放str [i]自然会产生“seg fault”。
我的问题是,在我的程序结束时,我没有跟踪哪个指针指向strdup()
生成的字符串。你可以帮助我找到strdup
生成的字符串,以便我可以释放它们吗?
谢谢
答案 0 :(得分:6)
不幸的是,没有语言功能可以(便携地)区分指向动态分配内存的指针和不指向内存的指针。您可以手动保留动态分配的索引列表。或者,如果性能不是一个很大的问题,请选择总是在堆上进行分配。
答案 1 :(得分:0)
也许您可以使用命名约定来帮助您记住哪个是:
char *str[10];
char *str_p[10];
str[i]="Hi";
str_p[k]=strdup("hi");
(或使用带有指针和标志的结构,表明该特定指针是动态分配的)
答案 2 :(得分:0)
处理此问题的正确方法是通过malloc()
或strdup()
跟踪动态分配的内容。
您必须重构您的计划才能实现这一目标。