|
10鱼币
上代码- # include <stdio.h>
- # include <malloc.h>
- int main(void)
- {
- int a[5];
- int len;
- int * pArr;
- int i;
- printf("请输入你要存放的元素的个数: ");
- scanf("%d", &len);
- pArr = (int *)malloc(4 * len);
-
- for (i=0; i<len; ++i)
- scanf("%d", &pArr[i]);
- printf("一维数组的内容是:\n");
- for (i=0; i<len; ++i)
- printf("%d\n", pArr[i]);
-
- free(pArr); //释放掉动态分配的数组
-
-
- for (i=0; i<len; ++i)
- scanf("%d", &pArr[i]);
- printf("一维数组的内容是:\n");
- for (i=0; i<len; ++i)
- printf("%d\n", pArr[i]);
- return 0;
- }
复制代码 我认为,在free函数运行完毕之后,p指针的内存就是释放掉了,所以后面的两个for语句应该出错,但在实际的运行当中并没有出错,仍可以输入输出,我是这个地方有疑问,之前开过一贴,有可能是我问题提错了,所以没弄明白,有开新帖,欢迎指导
|
最佳答案
查看完整内容
free(p);
就是给系统管理了,但是你仍然可以通过p去访问那块空间,但是,一旦你访问了,就造成内存访问越界了
其他程序就可以再次向系统申请到那块空间,然而,却在其他程序使用的时候,你把内存里的数据修改了,那就可能造成那个程序崩溃了,
所以在free(p) 之后, 要p=NULL
p=NULL的作用:
当程序很长的时候,或许你在某个地方已经free一块空间了,但是你忘记了,或者在不经意的时候,再次使用了这块内存,那么编译器就报错,告诉你使用 ...
|