C 为什么这个数组在释放后仍然存在?
我正在释放分配给C 为什么这个数组在释放后仍然存在?,c,pointers,malloc,free,C,Pointers,Malloc,Free,我正在释放分配给b的内存。但我的印象是,在“释放”内存后,动态分配的内存就会消失。但是这个代码没有任何错误,即使在释放它之后,我仍然可以访问分配给b元素的原始值。这怎么可能?我应该怎么做才能完全擦除b #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc,char* argv[]) { int i, imax; int *b; imax=
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;
}
使用
free
释放对象后访问该对象将调用未定义的行为。不要这样做
即:
for (i=0; i < imax; i++)
{
printf("%d ",b[i]); // invokes undefined behavior!
}
(i=0;i
{
printf(“%d”,b[i]);//调用未定义的行为!
}
如果你运气不好,什么事都不会发生,但从撞车到鼻魔,一切都可能发生。这是一个未定义行为的例子。有许多不同的可能性,包括:
所以,为了可爱的小企鹅,请避免阅读释放的记忆 这个问题大约有5000个重复。除了Drew关于避免读取空闲内存的评论。通常,在空闲时间之后将指针设置为null是一种很好的做法。
for (i=0; i < imax; i++)
{
printf("%d ",b[i]); // invokes undefined behavior!
}