C语言调试 exe 中的 0x0122177d 处未处理的异常: 0xC0000005: 写入位置 0xcdcdcdd5 时发生访问冲突

szy823804813 2011-10-14 11:00:44
代码附上,希望各位高手能帮忙解决,感激不尽,自己是在改不出来。

#include "stdafx.h"
#include"malloc.h"
#define len sizeof(struct qa)

struct qa
{
float num;
float m;
struct qa *next;
};


void main()
{
struct qa *head1,*head2,*headh,*p1,*p2,*ph;
struct qa *pt,*p;
int x,m,n,t,i;
char a,b,c;
pt=p=(struct qa *)malloc(len);
p1=pt;
head1=p1;
printf("输入多项式1非零系数个数");
scanf("%d",&n);
printf("输入多项式1");
for(i=0;i<n;i++)
{
scanf("%c%d%c%d%c",&a,&p1->num,&b,&p1->m,&c);
pt=(struct qa *)malloc(len);
p1->next=pt;
p1=p1->next;

}
p1->next=NULL;
pt=(struct qa *)malloc(len);
p2=pt;
head2=p2;
printf("输入多项式2非零系数个数");
scanf("%d",&n);
printf("输入多项式2");
for(i=0;i<n;i++)
{
scanf("%c%d%c%d%c",&a,&p2->num,&b,&p2->m,&c);
pt=(struct qa *)malloc(len);
p2->next=pt;
p2=p2->next;

}
p2->next=NULL;
pt=(struct qa *)malloc(len);
ph=pt;
headh=ph;
p1=head1;
p2=head2;
while(p1&&p2)
{
if(p1->m<p2->m)
{
ph->num=p1->num;
ph->m=p1->m;
pt=(struct qa *)malloc(len);
ph->next=pt;
ph=ph->next;
p1=p1->next;
continue;
}
if(p1->m>p2->m)
{
ph->num=p2->num;
ph->m=p2->m;
pt=(struct qa *)malloc(len);
ph->next=pt;
ph=ph->next;
p2=p2->next;
continue;
}
if(p1->m==p2->m)
{
if(p1->num+p2->num!=0)
{
ph->num=p1->num+p2->num;
ph->m=p1->m;
pt=(struct qa *)malloc(len);
ph=ph->next;
p1=p1->next;
p2=p2->next;
}
else
{
p1=p1->next;
p2=p2->next;
}
}
if(p1)
ph->next=p1;
if(p2)
ph->next=p2;
for(ph=headh;ph!=NULL;ph=ph->next)
{
printf("(%f,%f)",ph->num,ph->m);
}
}
...全文
526 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-10-14
  • 打赏
  • 举报
回复
google 0xC0000005

一般来说是非法使用内存
如果有 array, 看看越界没有
如果有 malloc, 看看分配成功没有,空间分配的是否足够
星羽 2011-10-14
  • 打赏
  • 举报
回复
你的ph 和p1这些指针有问题
malloc出来的东西next要初始化为NULL一下

指针用的时候要判空
lengxujun 2011-10-14
  • 打赏
  • 举报
回复
有一种方法叫调试:下断点,printf()等.
羽飞 2011-10-14
  • 打赏
  • 举报
回复
楼主把哪一行挂的标出来
这样的错误肯定是内存非法访问,不是越界就是野指针

70,020

社区成员

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

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