gpt4 book ai didi

c - 函数 free() 不会从 vector 中取消分配内存

转载 作者:行者123 更新时间:2023-11-30 14:33:38 25 4
gpt4 key购买 nike

为什么即使我使用 free(a) 从中取消分配内存之后,我仍然可以使用相同的 vector ?我的意思是,在从内存中释放它之后,我仍然可以使用相同的 vector 进行操作。

这是 malloc() 的功能还是我的代码中的错误?

int main() {
int n,i,j;
int *a;

printf("n = ");
scanf("%d", &n);
if((a=(int*)malloc((1+n)*n/2* sizeof(int)))==NULL){
printf("Insuficient memory\n");
exit(EXIT_FAILURE);
}
for(i=0;i<n;i++){
for(j=0;j<n-i;j++){
if(i==0 || j==0){
*(a+(2*n-i+1)*i/2+j)=1;
} else {
*(a+(2*n-i+1)*i/2+j)=*(a+(2*n-i+2)*(i-1)/2+j)+*(a+(2*n-i+1)*i/2+j-1);
}

}
}
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<n-i;j++){
printf("%d ",*(a+(2*n-i+1)*i/2+j));
}
}
free(a);
printf("\nfree() has been used\n");
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<n-i;j++){
printf("%d ",*(a+(2*n-i+1)*i/2+j));
}
}
return 0;
}

提前致谢<3

最佳答案

这是释放后使用且未定义的行为。没有人能保证什么会起作用,什么不会起作用。

这不是一个错误,您仍然可以访问它。所有 free 的作用就是告诉系统释放内存。平均而言,它可能会继续访问一段时间。通常认为,释放后应该将指针设置为 NULL,这样在释放后就不会意外使用它。

关于c - 函数 free() 不会从 vector 中取消分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59221904/

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