我用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;
} 展开
#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;
} 展开
1个回答
展开全部
最后printf("%u",sizeof(*data))的时候你要在做一次data是否为空的判断,因为这个时候确实data已经被释放了,data为空,但是sizeof(*data)这个时候实际上就是sizeof(long),所以是4,因为data是指针,所以sizeof()输出的就是这个指针的类型的字节数。
进一步说,不管data的内存空间是否已经释放,sizeof(*data)的结果都是4,
进一步说,不管data的内存空间是否已经释放,sizeof(*data)的结果都是4,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询