首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >double free()有什么问题?

double free()有什么问题?
EN

Stack Overflow用户
提问于 2014-10-07 06:03:12
回答 4查看 3.7K关注 0票数 3

我在web和我的高级C类(如下面的代码)中看到了相当多的错误代码。虽然我知道这显然是一种糟糕的编码实践,但是除了浪费CPU周期之外,我很难理解它所做的事情。根据我到目前为止的理解,如果指针分配没有位于"malloc表“中(因为缺少更好的单词),它通常会被忽略。我希望这里的人能让我更好地理解为什么这是坏的,(除了这是一件愚蠢的事情)和它的后果。

代码语言:javascript
复制
char* ptr = malloc(1);

...

free(ptr);
...
free(ptr);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-07 06:23:47

一个很好的建议:在空闲后取消指针。在您的情况下,您有未定义的行为,因为计算机可以分配内存,这是ptr指出的,或者可能没有分配这段内存,或者这块内存可以在碎片整理期间添加到其他内存块中,等等。

另一方面,空闲(NULL)是定义的,不会做任何事情。

代码语言:javascript
复制
char* ptr = malloc(1);
...
free(ptr);
ptr = NULL;
...
free(ptr);
票数 4
EN

Stack Overflow用户

发布于 2014-10-07 06:16:12

在您的示例中,在免费(Ptr)之后,您可以这样做

代码语言:javascript
复制
char* ptr = malloc(1);

free(ptr) // <-- This will delete the pointer
ptr2 = malloc(1) // <-- now you request again

现在malloc是它的样子,它可以返回与ptr相同的指针,如果是的话,如果现在返回的话。

代码语言:javascript
复制
// if you call me again and if ptr2 == ptr oops!
free(ptr)

-您的ptr2被释放,导致意外的行为,大量的崩溃,痛苦和数小时的调试.

票数 13
EN

Stack Overflow用户

发布于 2014-10-07 06:04:54

这不仅仅是浪费CPU周期。Double free()undefined behaviour,这意味着允许程序以任意方式运行。

这个程序可能运行得很好,或者在测试中爆炸了,或者通过了你所有的测试,然后在你的客户面前爆炸了,或者它可能破坏了一些数据,或者它可能会引发核打击等等。所有这些都是未定义行为的有效表现。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26229511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档