如何避免内存泄漏? (在这个例子和一般情况下)

时间:2016-06-01 06:51:25

标签: c memory-leaks gtk3

以下是代码段:

g_autofree gchar *foo = NULL;
foo = "Hello";
foo = g_strconcat (line, "there", NULL);

以前的foo引用是否有内存泄漏?为什么? 如何避免这种内存泄漏?

欢迎任何其他提示!

1 个答案:

答案 0 :(得分:0)

严格地说,您的字符串文字应该是const char *,因为它的未定义行为是修改指向字符串文字的指针。在C中不需要使它保持不变,但这更正确:

g_autofree char *foo = NULL;
const char *bar = "Hello";
foo = g_strconcat(bar, "there", NULL);

如果你内部化规则总是指向一个const char *类型的字符串文字,并且永远不会释放const char *个变量,那么上面的代码最终会本能地看起来不那么错误。

至于一般情况,没有比没有更好的答案,除非你已经释放它,否则不要覆盖堆分配的指针。"再说一次,如果有足够的经验来写C,这样做本能地看起来就错了。