出于好奇,我试图在之前的问题中找到答案,但似乎没有答案。所以在这里询问,我刚刚编写了一段代码,尝试为int指针(用于填充数组)分配内存并将int值扫描到其中。完成数组后,我想删除分配给指针的数据/内存。虽然我的代码运行良好,但是即使在释放指针后,我仍然能够看到int数组中的值。而如果我使用free两次,它会抛出错误(预计在单次使用free后)。这不是一种奇怪的行为吗?我在我的Mac上使用Xcode和Codechef进行了尝试,得到了相同的结果,为什么?
int *num=(int *)malloc(n*sizeof(int));
int i;
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
for(i=0;i<n-1;i++){
temp = some_function(x);
}
free(num);
for(i=0;i<n;i++)
{
printf("\nnum[%d]= %d\n",i,num[i]);
}
上述代码打印了num[]中的值,这实际上是不应该的。
free
不会真正清除那块内存,而只是将其释放以供其他分配使用。 - PcAF