以下是代码段:
g_autofree gchar *foo = NULL;
foo = "Hello";
foo = g_strconcat (line, "there", NULL);
以前的foo引用是否有内存泄漏?为什么? 如何避免这种内存泄漏?
欢迎任何其他提示!
答案 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,这样做本能地看起来就错了。