释放内存后我们如何访问指针?

VIN*_*TIC 3 c malloc free pointers

按照我的理解,

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;
}
Run Code Online (Sandbox Code Playgroud)

jer*_*ole 5

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

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