C 如何安全地释放内存?
下面给出的代码给出了未定义的行为,有时代码运行良好,但有时给出了C 如何安全地释放内存?,c,valgrind,free,C,Valgrind,Free,下面给出的代码给出了未定义的行为,有时代码运行良好,但有时给出了munmap\u chunk错误 char *str = "hello world"; if(str != NULL) free(str) 我在上面的代码中是否有错误 还有如何避免免费复制?如何检查变量是否现在有一些内存/或者以前没有释放过?该字符串没有分配给malloc(),因此不应该使用free()释放它。字符串文本在可执行文件中是静态分配的,而不是在运行时动态分配的。该字符串未使用malloc()分配,因此不应使用free(
munmap\u chunk
错误
char *str = "hello world";
if(str != NULL) free(str)
我在上面的代码中是否有错误
还有如何避免免费复制?如何检查变量是否现在有一些内存/或者以前没有释放过?该字符串没有分配给
malloc()
,因此不应该使用free()
释放它。字符串文本在可执行文件中是静态分配的,而不是在运行时动态分配的。该字符串未使用malloc()
分配,因此不应使用free()
释放它。字符串文本是在可执行文件中静态分配的,而不是在运行时动态分配的。char*str=“hello world”;
如果(str!=NULL)空闲(str)代码>
这是错误的,*str
不是malloced。“hello world”存储在只读存储器中,您无法释放它;
如果(str!=NULL)空闲(str)代码>
这是错误的,*str
不是malloced。“hello world”存储在只读内存中,您无法释放它通常,字符串文本(“hello world”)将存储在数据部分的只读页面中
所以你不能释放他们
如何避免免费复制?
free()将释放指向的内存,但不会将指针设为NULL。每次free()之后,将指针设为NULL
if(str != NULL)
{
free(str);
str = NULL;
}
通常,字符串文本(“hello world”)将存储在数据部分的只读页面中
所以你不能释放他们
如何避免免费复制?
free()将释放指向的内存,但不会将指针设为NULL。每次free()之后,将指针设为NULL
if(str != NULL)
{
free(str);
str = NULL;
}
我懂了。那么我第二个问题的答案呢?如何避免重复释放?为了避免再次调用free(),在每个free()掩码指针为NULL之后,您将不会再次释放它们…我已经在我的回答中解释了我明白了。那么我第二个问题的答案呢?如何避免重复释放?为了避免再次调用free(),请在每个free()之后将指针屏蔽为NULL,这样您就不会再次释放它们了…我在回答中解释了这是一个错误的好建议。首先,free(NULL)
是合法有效的,其次,您只隐藏了一个双重free。一个依赖这样一段代码的程序破坏了逻辑。一个依赖这样一段代码的程序破坏了逻辑。。?我不明白这一点。请解释一下?如果你发现自己在一个程序中不知道一块内存被释放了多少次(比如你的情况),那么你的逻辑是错误的。内存应该只释放一次。将指针设置为NULL
以防止再次释放内存是一个设计问题。这是一个错误的好建议。首先,free(NULL)
是合法有效的,其次,您只隐藏了一个双重free。一个依赖这样一段代码的程序破坏了逻辑。一个依赖这样一段代码的程序破坏了逻辑。。?我不明白这一点。请解释一下?如果你发现自己在一个程序中不知道一块内存被释放了多少次(比如你的情况),那么你的逻辑是错误的。内存应该只释放一次。将指针设置为NULL
以防止再次释放内存是一个设计问题。