我用realloc函数重新分配了calloc函数分配的内存,但是为什么在释放掉了内存后,还是显示有字节呢? 15

#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));

}
}
printf("%u",sizeof(*data));/*第1个iif中我就已经释放掉了分配过的内存,为什么这里还是会显示为4呢?*/
return 1;
}
展开
 我来答
FTCmo333
2013-11-24 · 超过16用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:38.8万
展开全部
最后printf("%u",sizeof(*data))的时候你要在做一次data是否为空的判断,因为这个时候确实data已经被释放了,data为空,但是sizeof(*data)这个时候实际上就是sizeof(long),所以是4,因为data是指针,所以sizeof()输出的就是这个指针的类型的字节数。
进一步说,不管data的内存空间是否已经释放,sizeof(*data)的结果都是4,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式