gpt4 book ai didi

c - free 不会删除分配给指针(int 数组)的内存,使用 free 两次有效,为什么?

转载 作者:太空狗 更新时间:2023-10-29 15:11:14 34 4
gpt4 key购买 nike

这是出于好奇,我试图找到我对之前问题的疑问的答案,但他们似乎没有答案。所以在这里问,我只是写了一个代码,我试图将内存分配给一个 int 指针(以填充一个数组)并将 int 值扫描到它。完成数组后,我想删除分配给指针的数据/内存。尽管我的代码一切正常,但为什么即使在释放ing 指针后我仍然能够看到 int 数组中的值。然而,如果我使用 free 两次,它会抛出一个错误(这是在一次使用 free 后预期的)。这不是一种奇怪的行为吗?我也在 codechef 上使用 Xcode 在我的 mac 上尝试过,同样的行为,为什么?

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 时,您只告诉内存管理器它可以再次使用该部分内存进行另一个 malloc 调用。它不会删除内容(这将花费额外的时间而没有任何功能)。但是,您可以访问它,因为指针仍然指向有效地址。不过,它会导致未定义的行为,因为内存管理器可能已经将该内存分配给其他一些代码。

第二次调用 free 会产生错误,因为内存管理器不再知道该指针是有效的(您只是 free 了它!)。事实上,这是未定义的行为

关于c - free 不会删除分配给指针(int 数组)的内存,使用 free 两次有效,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37851778/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com