Tag: 双重自由

“双重免费”是什么意思?

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