下面给出的代码给出了未定义的行为,有时代码运行良好,但有时会出现munmap_chunk
错误。
char *str = "hello world";
if(str != NULL) free(str)
我在上面的代码中有什么问题吗?
另外如何避免duplicate free
?如何检查变量现在是否有一些内存/或之前没有被释放?
答案 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”存储在只读存储器中,你无法释放它