做一个循环,用calloc分配内存,realloc重新分配,跳出循环后释放了分配的内存,为什么还是可以执行scanf呢?

#include<stdio.h>#include<stddef.h>#include<stdlib.h>intmain(void){long*data=NULL;siz... #include<stdio.h>
#include<stddef.h>
#include<stdlib.h>
int main(void)
{
long *data=NULL;
size_t count=0; /*用来记录需要开多少内存*/
size_t oldcount=0;/*用来记录上次分配的内存数*/
while(1)
{
oldcount=count;
scanf("%u",&count);/*输入所需要分配的内存*/
if(count==0) /*如果输入的是0,且data已经分配内存,则释放内存后跳出循环*/
{
if(data)
free(data);
break;
}

if(data&&count<oldcount)/*如果data已经分配过内存并且这次分配的内存比上次分配的少,
就用realloc重新分配一次*/
data=(long *)realloc(data,sizeof(long)*count);
else/*否则 释放掉上次分配的内存 重新分配一个符合本次count的内存*/
{
if(data)
free(data);
data=(long *)calloc(count,sizeof(long));

}
}

scanf("%ld",data);/*跳出循环后已经释放了内存,为什么这条语句还能执行呢?*/
printf("%ld",*data);
return 1;
}
展开
 我来答
碧血归邪
2013-11-25 · TA获得超过401个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:106万
展开全部
这个问题我看见过,一个指针,除非本身等于NULL,否则free以后不会等于NULL。别人的答案,我就不多说了,具体的参见http://zhidao.baidu.com/link?url=YRrLgB9BRdocpibH_7lNmEMmyYCx6GlhN1LBzRYU4u28lyIi7dG31EtAPiPP4lHEaFoYj-IZO8b0eFofmEJu-a
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式