|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大佬们,我用malloc给结构体里面的指针成员变量 int *a分配了10*int大小的空间,相对于就是一个int a[10]的数组,
可是为什么我释放不了空间呀,只是释放一部分。free(指向将要释放的内存空间的地址);
我写的就是 free(p->a)就第一个函数malloc分配的空间地址呀,可是为什么还释放不了呀。
希望大佬们可以解答一下疑惑,非常感谢!!!- #include <stdio.h>
- #include <stdlib.h>
- struct std
- {
- int *a;
- };
- //给p->a申请10*int大小的空间
- void show1(struct std *p)
- {
- p->a=(int *)malloc(10*sizeof(int));
- }
- //给p->a赋值
- void show2(struct std *p)
- {
- int i,e;
- for(i=0;i<5;i++)
- {
- scanf("%d",&e);
- p->a[i]=e;
- }
- }
- //用free释放p->a
- void show3(struct std *p)
- {
- int i;
- //释放前,p->a的情况
- printf("====\n");
- printf("释放前\n");
- for(i=0;i<5;i++)
- {
- printf("&p->a[i]:%p\t",&p->a[i]);
- printf("p->a[i]:%d\n",p->a[i]);
- }
- free(p->a);
- //释放后,p->a的情况
- printf("====\n");
- printf("释放后\n");
- for(i=0;i<5;i++)
- {
- printf("&p->a[i]:%p\t",&p->a[i]);
- printf("p->a[i]:%d\n",p->a[i]);
- }
- }
- int main()
- {
- struct std p;
- show1(&p);
- show2(&p);
- show3(&p);
- return 0;
- }
复制代码
free()只是将malloc()函数申请的空间释放掉,并不能将指针置空,指针的指向还是之前的,并不会改变
没有释放之前,该空间一直归本程序使用,
释放掉之后,对应的空间可以被其他程序使用,之后再对该空间进行访问,可能就不是原来的值了。
释放空间,不是说该空间的值就一定会变。只是说该空间的值可以被其他程序修改了
举个例子吧
就像是老师去教室上课,语文老师(相当于你的程序)在了这间教室(访问的空间单元)上课,下课后没有擦黑板就走了。过了一会儿,你再去这间教室看的时候,黑板上可能还是语文老师写的东西,也可能有其他老师(另外的程序)在这间教室上过课,改掉了黑板的内容。
你这刚刚下课,就再去看黑板很可能是没有变的。但是具体什么时候变,那就看教务处(程序调度管理进程)的安排了,安排了其他课程,那么就变了,一直没安排,可能就会存在的时间比较长。
|
-
|