按照我的理解,
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/