为什么我在使用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
答案 0 :(得分:1)
这是一个可以用后使用的行为,并且是未定义的行为。没有人能保证会行之有效。
这不是错误,您仍然可以访问它。所有免费的工作就是告诉系统释放内存。平均而言,它可能会继续保持一段时间。通常认为,释放后应将指针设置为NULL,以免释放后不小心使用它。