aud*_*tic 3 c memory free memory-management undefined-behavior
我一直在Web和我的Advanced C类中看到相当多的错误代码(例如下面的代码).虽然我明白这显然是糟糕的编码实践,但我很难知道除了浪费CPU周期之外它做得多么糟糕.根据我的理解,到目前为止,如果指针分配不在"malloc表"中(因为没有更好的单词),通常会被忽略.如果有人在这里可以让我更好地了解为什么这是坏事(除了事实上这是一件很愚蠢的事情)以及它的后果,我会很感激.
char* ptr = malloc(1);
...
free(ptr);
...
free(ptr);
Run Code Online (Sandbox Code Playgroud)
小智 12
在你的例子之后考虑你做了免费(ptr)跟随
char* ptr = malloc(1);
free(ptr) // <-- This will delete the pointer
ptr2 = malloc(1) // <-- now you request again
Run Code Online (Sandbox Code Playgroud)
现在malloc就是这样,并且可以返回与ptr相同的指针,如果确实如此,现在就可以
// if you call me again and if ptr2 == ptr oops!
free(ptr)
Run Code Online (Sandbox Code Playgroud)
- 你的ptr2被释放导致意外的行为,有很多崩溃,痛苦和几小时的调试..
一个很好的建议:免费后取消指针.在你的情况,你有不确定的行为,因为电脑可以分配内存,这是由ptr指向,也可以不分配这块内存,或该块的内存碎片整理过程中可以添加到其他内存块等
另hand,free(NULL)已定义且不执行任何操作.
char* ptr = malloc(1);
...
free(ptr);
ptr = NULL;
...
free(ptr);
Run Code Online (Sandbox Code Playgroud)