求解释一下这个错误的原因?麻烦进来看一下,谢谢!

qq_32736835 2016-06-07 10:06:50
代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

struct stu_tea
{
char name[20];
int age;
char job;
union
{
int classno;
char office[10];
}depart;
};
void main()
{
//struct stu_tea body[2];
struct stu_tea *p;
p=(stu_tea*)malloc(2*sizeof(stu_tea));
if(p==NULL)
{
exit(0);
}
int i;
for(i=0;i<2;i++)
{
//scanf("%s %d %c",body[i].name,&body[i].age,&body[i].job);
scanf("%s %d %c",p->name,&p->age,&p->job);


if(p->job=='s')
scanf("%d",&p->depart.classno);
else
scanf("%s",p->depart.office);
p++;
}
for(i=0;i<2;i++)
p--;
for(i=0;i<2;i++)
{
if(p->job=='s')
printf("%s\t%3d%3c %d\n",p->name,p->age,p->job,p->depart.classno);
else
printf("%s\t%3d%3c %s\n",p->name,p->age,p->job,p->depart.office);
p++;
}
free (p);
}
问题:
程序能运行,但是会有下图这个错误
...全文
41 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_32736835 2016-06-07
  • 打赏
  • 举报
回复
懂了,谢谢!
lm_whales 2016-06-07
  • 打赏
  • 举报
回复
1)第二次循环,越界访问,因为第一次循环的两次 p++造成 p越界了 2)free 的指针,不是 malloc 或者 realloc 或者 calloc 分配的内存 malloc 和 free 要对应 也就是说free 的时候,实参指针的值,应该是 malloc 分配的内存地址值。 (其实 free 的时候,跟指针变量名字,不相干,只需要值跟分配的时候相等,就可以了, 千万不要以为名字没变,就是对的) 你这里,两个循环,p++ 执行了四次,不再是分配时候的值了,释放内存出错
小灸舞 版主 2016-06-07
  • 打赏
  • 举报
回复
这个是堆释放出错才会出现的异常 原因在于你printf完以后没有把p重新--回到内存开始的位置,所以free出错

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

struct stu_tea
{
	char name[20];
	int age;
	char job;
	union
	{
		int classno;
		char office[10];
	}depart;
};
void main()
{
	//struct stu_tea body[2];
	struct stu_tea *p;
	p=(stu_tea*)malloc(2*sizeof(stu_tea));
	if(p==NULL)
	{
		exit(0);
	}
	int i;
	for(i=0;i<2;i++)
	{
		//scanf("%s %d %c",body[i].name,&body[i].age,&body[i].job);
		scanf("%s %d %c",p->name,&p->age,&p->job);


		if(p->job=='s')
			scanf("%d",&p->depart.classno);
		else
			scanf("%s",p->depart.office);
		p++;
	}
	for(i=0;i<2;i++)
		p--;
	for(i=0;i<2;i++)
	{
		if(p->job=='s')
			printf("%s\t%3d%3c %d\n",p->name,p->age,p->job,p->depart.classno);
		else
			printf("%s\t%3d%3c %s\n",p->name,p->age,p->job,p->depart.office);
		p++;
	}
	for(i=0;i<2;i++)
		p--;
	free (p);
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧