【发布时间】:2026-01-16 18:25:01
【问题描述】:
正如标题所暗示的,我是 C 的新手,很快就会有期中考试。我目前正在修改过去的论文,一个反复出现的主题是双重免费问题。我知道这是在同一内存位置两次调用free() 的过程,但我有几个问题我不是 100% 确定如何回答:
问题一:C语言中double free的结果是什么,为什么会出现这样的问题?
这将导致双重释放:
char* ptr = malloc(sizeof(char));
*ptr = 'a';
free(ptr);
free(ptr);
我对此的回应是它会返回 0x0 内存地址并导致系统不稳定/崩溃。另外,如果我没记错的话,双重释放实际上可以调用malloc 两次,这会导致缓冲区溢出,从而使系统易受攻击。
简要总结这个问题的最佳方式是什么?
问题 2:描述一个特别容易引入 C 语言中的双重免费?
我在想,当你在你周围传递指针时,可能会不小心在一个函数中释放它,然后又在不知不觉中释放它?
再次,总结这一点的“最佳”方式是什么?
【问题讨论】:
-
"...would it return a 0x0 memory address..."- 这是怎么回事? what 会返回 0x0 内存地址吗?函数free不返回任何内容。 -
双重免费错误有时可能是极其严重的安全漏洞 - 这是一个示例:awakened1712.github.io/hacking/hacking-whatsapp-gif-rce
标签: c double-free