按照我的理解,

free() 用于释放我们之前使用 malloc 分配的内存。

在下面的代码片段中,我释放了分配的内存。但是即使在释放后我也能够访问指针?怎么可能?

免费在内部如何运作?

#include<iostream>
using namespace std;

int main()
{
   int *p=(int *)malloc(sizeof(int));
   *p=17;
   free(p);
   *p=*p+1;
   printf("\n After freeing memory :: %d ",*p );
   return 0;
}

最佳答案

你当然可以在调用 p 后继续使用 free(p),没有什么能阻止你。然而,结果将是完全未定义和不可预测的。它只能靠运气。这是一个常见的编程错误,称为“use after free ”,它在许多程序中可以正常运行 没有“问题”——直到它引起问题。

有一些工具非常擅长查找此类错误,例如 Valgrind

关于c - 释放内存后我们如何访问指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22033822/

10-11 23:00
查看更多