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