我释放分配给b
的内存。但我的印象是,在你“释放”它之后,分配的内存会动态消失。但是我没有收到任何关于此代码的错误,即使在释放后,我仍然可以访问分配给b
元素的原始值。这怎么可能 ?我该怎么做才能完全删除b
?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc,char* argv[])
{
int i, imax;
int *b;
imax=5;
b=malloc(sizeof(int)*imax);
for (i=0; i < imax; i++)
{
b[i]=i*i;
printf("%d ",b[i]);
}
free(b);
printf("\n memory freed \n");
for (i=0; i < imax; i++)
{
printf("%d ",b[i]);
}
printf("\n");
return 0;
}
使用gcc编译并运行后的结果
0 1 4 9 16
memory freed
0 1 4 9 16
答案 0 :(得分:4)
这是未定义行为的示例。有许多不同的可能性,包括:
所以,为了可爱的小企鹅,请避免阅读释放的记忆!
答案 1 :(得分:0)
在free
空闲后访问对象会调用未定义的行为。不要这样做。
那是:
for (i=0; i < imax; i++)
{
printf("%d ",b[i]); // invokes undefined behavior!
}
如果你运气不好,什么都不会发生,但一切都可能发生在从崩溃到鼻腔的恶魔身上。