关于C语言的动态内存分配 malloc和free函数

代码如下,为什么程序加上free(p)就会报错?第一张是报错的截屏,第二张图是没加free(p);请问一下是程序写错了么,#include<stdio.h>#includ... 代码如下,为什么程序加上free(p)就会报错?
第一张是报错的截屏,第二张图是没加free(p);
请问一下是程序写错了么,
#include<stdio.h>
#include<malloc.h>

int main()
{
int *p=NULL;
int years=1994;
int days=365;
int flag=0;
int i=0;
int j=0;
if((0==years%400)||((0==years%4)&&(0!=years%100)))
{

p=(int*)malloc(366);
flag=1;
}
else
{
flag=0;
p=(int*)malloc(365);
}

p=p+31;
for(j=1;j<=29;j++)
{
*p=j;
printf("%-4d",*p);
p++;
if(0==j%4)
{
printf("\n");
}
}
free(p);

return 0;
}

*****************************************************************
展开
 我来答
乌鸦说电影原创解说
2015-03-16 · TA获得超过4182个赞
知道大有可为答主
回答量:3161
采纳率:83%
帮助的人:1413万
展开全部
是这样的圆败,如果不释放,下次这段动态内存空间就无法再族历使用了,久而久兆腔搜之,容易造成内存泄露这样的问题
#include<stdio.h>

#include<malloc.h>

int main()

{

int *p=NULL;

int years=1994;

int days=365;

int flag=0;

int i=0;

int j=0;

if((0==years%400)||((0==years%4)&&(0!=years%100)))

{

p=(int*)malloc(366);

flag=1;

}

else

{

flag=0;

p=(int*)malloc(365);

}

p=p+31;

for(j=1;j<=29;j++)

{

*p=j;

printf("%-4d",*p);

p++;

if(0==j%4)

{

printf("\n");

}

}

free(p);

return 0;

}
希望能够帮助到你,望采纳!
追问
我加上free(p)反而不正常了,这是为什么呢?
没有加上free就可以正常显示
追答
那就不加嘛

希望能够帮助到你,望采纳!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式