你如何安全地释放记忆?

时间:2014-06-04 06:49:15

标签: c valgrind free

下面给出的代码给出了未定义的行为,有时代码运行良好,但有时会出现munmap_chunk错误。

char *str = "hello world";
if(str != NULL) free(str)

我在上面的代码中有什么问题吗?

另外如何避免duplicate free?如何检查变量现在是否有一些内存/或之前没有被释放?

3 个答案:

答案 0 :(得分:2)

该字符串未分配malloc(),因此不应使用free()释放。字符串文字在您的可执行文件中静态分配,而不是在运行时动态分配。

答案 1 :(得分:2)

通常,字符串文字(“hello world”)将存储在数据部分的只读页面中。

所以你不能释放它们。

另外如何避免重复免费?

free()将释放指向的内存,但不会将指针设为NULL。每次执行free()后,指针都为NULL。

if(str != NULL)
{
 free(str);
 str = NULL;
}

答案 2 :(得分:0)

char *str = "hello world"; if(str != NULL) free(str);

这是错误的,*str没有被malloced。并且“hello world”存储在只读存储器中,你无法释放它