正如标题所暗示的那样,我是 C 的新手,很快就会有期中考试。我目前正在修改过去的论文,一个反复出现的主题是双重免费问题。我知道这是free()
两次调用同一内存位置的过程,但我有几个问题我不是 100% 确定如何回答:
问题 1:C 中 double free 的结果是什么,为什么会出现这样的问题?
这将导致双重释放:
char* ptr = malloc(sizeof(char));
*ptr = 'a';
free(ptr);
free(ptr);
我对此的回应是它会返回一个 0x0 内存地址并导致系统不稳定/崩溃。另外,如果我没记错的话,双重释放实际上可以调用malloc
两次,这会导致缓冲区溢出,从而使系统易受攻击。
简要总结这个问题的最佳方式是什么?
问题 2:描述一个特别容易在 C 中引入 double free 的情况?
我在想当你在你周围传递指针时可能会不小心在一个函数中释放它,并且在没有意识到的情况下再次释放它?
同样,总结这一点的“最佳”方式是什么?