结构体指针在使用完free后,该指针所指向的内存区域是什么,这个指针是变成了NULL,还是野指针。

 我来答
百度网友02d2007
2013-04-27 · TA获得超过140个赞
知道小有建树答主
回答量:196
采纳率:100%
帮助的人:109万
展开全部
不同的编译器会有区别,例如keil在free后该片内存区域的数据还是原来的数据,不过系统知道,这篇内存是不用的内存,下次可能在分配内存的时候就会被占用,有的编译器则是直接清除free后的内存区域,变成NULL,或者一些看不懂的数据,但是总归一点,这片内存已经可以被再次利用了。至于指针也是不同编译器也会有所区别,如果不放心,还怕会变成野指针可以在free后,将该指针赋值为NULL。望采纳
百度网友83cdc1c
2013-04-27 · TA获得超过5792个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:837万
展开全部
free后,该指针指向的内存区域被系统回收,但里面内容还是释放前的内容,只是被系统回收后,有可能马上又被其他地方申请出来使用,所以free后再去读取这块内存的内容就可能是不可预知的内容了。
free函数不会改变被释放指针的值,也就是说free后该指针还指向被释放的空间,一般需要特别对其赋值为NULL。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花花浪客
2013-04-27 · TA获得超过2069个赞
知道小有建树答主
回答量:792
采纳率:100%
帮助的人:707万
展开全部

野指针,所以需要再手工把指针置零

简单测试一下就能知道,看下面的程序与运行结果:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2013-04-27 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5635万
展开全部
结构体指针在使用完free后,该指针所指向的内存区域还是原来的区域,除非该地区又被系统派别的用处。
_msize() 返回 动态分配的 实际 内存大小。

#include<stdio.h>#include<stdlib.h>
#include<malloc.h>

struct ss {int x,y;
};

int main()
{
struct ss *S;
int i;
S = (struct ss*) malloc (sizeof(struct ss) * 3);
for (i=0;i<3;i++) { S[i].x=i; S[i].y=i*10;}

for (i=0;i<3;i++) printf("%d ", S[i].x);for (i=0;i<3;i++) printf("%d ", S[i].y);
printf("\nsize=%d\n", _msize(S));

free(S); // 释放for (i=0;i<3;i++) printf("%d ", S[i].x);
for (i=0;i<3;i++) printf("%d ", S[i].y);
printf("\nsize=%d\n", _msize(S));

return(0);
}
输出结果:
0 1 2 0 10 20
size=32
0 1 2 0 10 20
size=0
===
释放后,内存大小为0,但数值还在。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
9254924
2013-04-27
知道答主
回答量:7
采纳率:0%
帮助的人:1.1万
展开全部
规划建议建议提建议
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式