【发布时间】:2014-03-28 20:01:40
【问题描述】:
据我了解
free() 用于释放我们之前使用 malloc 分配的内存。
在接下来的 sn-p 中,我释放了我分配的内存。但是即使在释放之后我也能够访问指针?怎么可能?
免费在内部如何运作?
#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;
}
【问题讨论】:
-
内存还在,通常不会立即被覆盖。但是,将来对 malloc 的调用最终会重新使用该内存。
-
您可以调用同样未定义的行为,方法是从不分配内存并简单地取消引用不确定的指针。在您的代码中,一旦调用
free(),指针中包含的地址的有效性就会丢失,因此即使对其进行评估,更不用说取消引用,也会调用未定义的行为。