为什么甚至在之后]为什么也可以使用相同的向量?我已经使用过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(a)从中释放内存,为什么我仍可以使用相同的向量?那样的话,我的意思是,从内存中释放它之后,我仍然可以使用相同的向量进行操作。这是一个功能吗...
这是一种先用后用的行为,它是未定义的行为。没有人能保证会行之有效。
这不是错误,您仍然可以访问它。所有免费的工作就是告诉系统释放内存。平均而言,它可能会继续保持一段时间。通常认为,释放后应将指针设置为NULL,以免释放后不小心使用它。