c - 函数 free() 不会从向量中释放内存
问题描述
为什么即使在我使用 free(a) 从中取消分配内存之后,我仍然可以使用相同的向量?我的意思是说,从内存中释放它之后,我仍然可以使用相同的向量进行操作。
它是 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 的指针,这样你就不会在它被释放后意外使用它。
推荐阅读
- java - 使用 Java 记录作为 JPA 嵌入
- javascript - 需要更有效地解决我的“简单 JS”代码
- powerbi - PowerBIClient 没有任何价值
- python - pandas.resample(或 groupby)的自定义间隔
- python - 将 txt 文件读取到具有唯一分隔符和行尾的 pandas 数据帧
- python - 一种从 Python 中的类实例访问上下文管理器变量的方法?
- python - 将列表列表的特定元素除以一个数字?
- c# - 无法在 Invoke 中调用方法
- r - R - 无论如何要加快 dbWriteTable?
- django - 当创建用户并选择特定组时,如何在 Django 中将 is_staff 设置为 True