释放后使用 malloc() 分配的内存究竟发生了什么? 假设我执行以下操作...
int main(){
int * arr;
arr=(int*) malloc(sizeof(int)*20);
int i;
for(i=0;i<20;i++) arr[i]=2*i+1;
int * tmp=arr;
for(i=0;i<20;i++) printf("%d ",*(tmp+i));
printf("\n");
free(arr);
for(i=0;i<20;i++) printf("%d ",*(tmp+i));
return 0;
}
我得到输出...
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
0 0 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
为什么前两个条目改变了(而其他的没有改变)?
最佳答案
Why do the first two entries change(and the others don't)?
长话短说 undefined behavior .
一旦您在之前由 malloc()
返回的指针上调用了 free()
,该指针就不再有效程序上下文。尝试使用它调用 undefined behavior .
谈到实际内存发生了什么,好吧,这也取决于环境。调用 free()
只是一种通知下层(操作系统/内存管理器)可以回收和重用内存的方式如果需要/强>。没有任何内容强制必须清理(清零)或类似的内存位置。
关于c - 被 malloc() 分配后释放的内存会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797297/