首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟我的这个链表为什么会有 Access Violation? 这个是做三元二次多项式相乘的

2012-02-25 
我的这个链表为什么会有Access Violation? 这个是做三元二次多项式相乘的。#includeiostream.h#includes

我的这个链表为什么会有 Access Violation? 这个是做三元二次多项式相乘的。
#include   <iostream.h>
#include   <string.h>
#include   <malloc.h>

#define   NULL   0
#define   LEN   sizeof(struct   DXS)

struct   DXS  
{
int   data;
char   X;
int   Xexop;
char   Y;
int   Yexop;
struct   DXS   *next;
};

int   main()
{
                 
int   SZ[5][5][5];
//char   DF[35][10];
//         char   N[10];
char   x= '1 ',y= '2 ',z= '3 ';           //当DXS节点的   X     或者Y     的值   是1,2,3   时分别表示   是   x   ,   y   ,z.  


      for(int   r=0;   r   <   5;r++   )
      for(int   w   =0   ;w <5;   w++)
            for(int   O   =   0;   O   <   5;   O++)
    SZ[r][w][O]=0;


    /*     定义几个结点   */
struct   DXS   a,b,c,d,e,f,g,*p1,*head1;
struct   DXS   A,B,C,D,E,F,G,*p2,*head2;

/*       初始化   每个结点*/          
a.X   = '0 ';   a.Xexop   =0;   a.Y= '0 ';   a.Yexop   =0;
b.X   =x;   b.Xexop   =1;   b.Y= '0 ';   b.Yexop   =0;
c.X   =x;   c.Xexop   =2;   c.Y= '0 ';   c.Yexop   =0;
        d.X   =y;   d.Xexop   =1;   d.Y= '0 ';   d.Yexop   =0;
e.X   =y;   e.Xexop   =2;   e.Y= '0 ';   e.Yexop   =0;
f.X   =z;   f.Xexop   =1;   f.Y= '0 ';   f.Yexop   =0;
g.X   =z;   g.Xexop   =2;   g.Y= '0 ';   g.Yexop   =0;

        A.X   = '0 ';   A.Xexop   =0;   A.Y= '0 ';   A.Yexop   =0;
B.X   =x;   B.Xexop   =1;   B.Y= '0 ';   B.Yexop   =0;
C.X   =x;   C.Xexop   =2;   C.Y= '0 ';   C.Yexop   =0;
        D.X   =y;   D.Xexop   =1;   D.Y= '0 ';   D.Yexop   =0;
E.X   =y;   E.Xexop   =2;   E.Y= '0 ';   E.Yexop   =0;
F.X   =z;   F.Xexop   =1;   F.Y= '0 ';   F.Yexop   =0;
G.X   =z;   G.Xexop   =2;   G.Y= '0 ';   G.Yexop   =0;

/*   把控件里的数赋给结点的data   域           */

A.data   =1;       //常数项                   第一个多项式
        B.data   =0;       //X的系数
C.data   =0;       //X平方的系数
  D.data   =0;       //Y的系数
        E.data   =0;       //Y平方的系数
F.data   =1;       //Z的系数
G.data   =1;       //Z平方的系数


a.data   =1;       //常数项           第二个多项式
        b.data   =0;       //X的系数
c.data   =0;       //X平方的系数


  d.data   =0;       //Y的系数
        e.data   =0;       //Y平方的系数
f.data   =1;       //Z的系数
g.data   =1;       //Z平方的系数*/

/*     把结点连接成一个链表*/

head1   =&a;   a.next=   &b;   b.next   =&c;   c.next   =&d;   d.next=&e;   e.next   =&f;   f.next   =&g;g   .next   =NULL;  
head2   =&A;   A.next=   &B;   B.next   =&C;   C.next   =&D;   D.next=&E;   E.next   =&F;   F.next   =&G;G   .next   =NULL;

       

//     上面已经把两个多项是初始化为两个链表,下面要这两个表相乘


      struct   DXS   *p,   *v,   *q,   *head;
      int   n=0;
      p=   v   =   (struct   DXS   *)   malloc   (LEN);

//       p.data   =     A.data   *   a.data;
      head   =NULL;
      for(p1   =head1;   p1!=NULL;p1=   p1-> next)
      for(p2   =head2;   p2!=   NULL;   p2   =p2-> next)
      {

      n=   n+1;
      if   (n==1)   head   =p;
      else   v-> next   =   p;
      v=p;
      p   =(struct   DXS   *)   malloc   (LEN);

      if(p1-> X==p2-> X)
      {
      p-> data   =p1-> data*p2-> data;
      p-> X=   p1-> X;
      p-> Xexop=p1-> Xexop+p2-> Xexop;
      p-> Y= '0 ';
      p-> Yexop= '0 ';
      }
      else  
      {
      p-> data   =   p1-> data*p2-> data;
      p-> X   =   p1-> X;
      p-> Xexop   =   p1-> Xexop;
                      p-> Y   =   p2-> X;
      p-> Yexop   =   p2-> Xexop;
      }
      cout   < <   p-> data;
      }
      p-> next=   NULL;       //链表的尾部   赋为空
     
                  //     上面是49个节点
      //       把   同   类   项   的   系   数   加   起   来
 
      for(q=head;   q   !=NULL;q=q-> next)//就是这个语句中说有   内存   访问错误
      {

      n--;
      if(q-> X== '0 '&&q-> Y== '0 ')                                 //把常数   计算出来
      SZ[0][0][0]   +=q-> data;                            
                      if((q-> X== '0 '&&q-> Y==x&&q-> Yexop==1)||(q-> X==x&&q-> Y== '0 '&&q-> Xexop==1))         //   计算出   x的系数         下面以此类推


      SZ[1][0][0]   +=q-> data;
      if((q-> X== '0 '&&q-> Y==x&&q-> Yexop==2)||(q-> X==x&&q-> Y== '0 '&&q-> Xexop==2))     //x2
      SZ[2][0][0]   +=q-> data;
                      if((q-> X== '0 '&&q-> Y==x&&q-> Yexop==3)||(q-> X==x   &&   q-> Y== '0 '   &&   q-> Xexop==3))     //x3
      SZ[3][0][0]   +=q-> data;
                      if((q-> X== '0 '&&q-> Y==x&&q-> Yexop==4)||(q-> X==x&&q-> Y== '0 '&&q-> Xexop==4))     //x4
      SZ[4][0][0]   +=q-> data;
     
      if((q-> X== '0 '&&q-> Y==y&&q-> Yexop==1)||(q-> X==y&&q-> Y== '0 '&&q-> Xexop==1))     //y
      SZ[0][1][0]   +=q-> data;
      if((q-> X== '0 '&&q-> Y==y&&q-> Yexop==2)||(q-> X==y&&q-> Y== '0 '&&q-> Xexop==2))     //y2
      SZ[0][2][0]   +=q-> data;
                      if((q-> X== '0 '&&q-> Y==y&&q-> Yexop==3)||(q-> X==y&&q-> Y== '0 '&&q-> Xexop==3))     //y3
      SZ[0][3][0]   +=q-> data;
                      if((q-> X== '0 '&&q-> Y==y&&q-> Yexop==4)||(q-> X==y&&q-> Y== '0 '&&q-> Xexop==4))     //y4
      SZ[0][4][0]   +=q-> data;
     
     
                      if((q-> X== '0 '&&q-> Y==z&&q-> Yexop==1)||(q-> X==z&&q-> Y== '0 '&&q-> Xexop==1))     //z
      SZ[0][0][1]   +=q-> data;
      if((q-> X== '0 '&&q-> Y==z&&q-> Yexop==2)||(q-> X==z&&q-> Y== '0 '&&q-> Xexop==2))     //z2
      SZ[0][0][2]   +=q-> data;
                      if((q-> X== '0 '&&q-> Y==z&&q-> Yexop==3)||(q-> X==z&&q-> Y== '0 '&&q-> Xexop==3))     //z3
      SZ[0][0][3]   +=q-> data;
                      if((q-> X== '0 '&&q-> Y==z&&q-> Yexop==4)||(q-> X==z&&q-> Y== '0 '&&q-> Xexop==4))     //z4
      SZ[0][0][4]   +=q-> data;
                 
     
                      if((q-> X=y&&q-> Y==x&&q-> Yexop==1&&q-> Xexop==2)||(q-> X==x&&q-> Y==y&&q-> Xexop==2&&q-> Yexop==1))     //x2y
      SZ[2][1][0]   +=q-> data;
                      if((q-> X=y&&q-> Y==x&&q-> Yexop==2&&q-> Xexop==2)||(q-> X==x&&q-> Y==y&&q-> Xexop==2&&q-> Yexop==2))       //x2y2


      SZ[2][2][0]   +=q-> data;
                      if((q-> X==z&&q-> Y==x&&q-> Yexop==1&&q-> Xexop==2)||(q-> X==x&&q-> Y==z&&q-> Xexop==2&&q-> Yexop==1))       //x2z
      SZ[2][0][1]   +=q-> data;
                      if((q-> X==z&&q-> Y==x&&q-> Yexop==2&&q-> Xexop==2)||(q-> X==x&&q-> Y==z&&q-> Xexop==2&&q-> Yexop==2))         //x2z2
      SZ[2][0][2]   +=q-> data;
     
                     
                      if((q-> X==x   &&   q-> Y==y   &&   q-> Yexop==1   &&   q-> Xexop==1   )   ||   (q-> Y==y   &&   q-> Y==x   &&   q-> Yexop==1   &&   q-> Xexop==1))       //xy
      SZ[1][1][0]   +=q-> data;
                      if((q-> X==x&&q-> Y==y&&q-> Yexop==1&&q-> Xexop==2)||(q-> Y==y&&q-> Y==x&&q-> Yexop==2&&q-> Xexop==1))       //xy2
      SZ[1][2][0]   +=q-> data;
      if((q-> X==z   &&   q-> Y==x   &&   q-> Yexop==1   &&   q-> Xexop==1)   ||   (q-> X==x   &&   q-> Y==z   &&   q-> Xexop==1   &&   q-> Yexop==1))     //xz
      SZ[0][1][2]   +=q-> data;
      if((q-> X==x&&q-> Y==z&&q-> Yexop==1&&q-> Xexop==2)||(q-> X==z&&q-> Y==x&&q-> Xexop==2&&q-> Yexop==1))     //xz2
      SZ[1][0][2]   +=q-> data;

                      if((q-> X==y&&q-> Y==z&&q-> Yexop==2&&q-> Xexop==1)||(q-> X==z&&q-> Y==y&&q-> Xexop==1&&q-> Yexop==2))       //zy2
      SZ[0][2][1]   +=q-> data;
                      if((q-> X==z&&q-> Y==y&&q-> Yexop==2&&q-> Xexop==2)||(q-> X==y&&q-> Y==z&&q-> Xexop==2&&q-> Yexop==2))         //y2z2
      SZ[0][2][2]   +=q-> data;
                      if((q-> X==z&&q-> Y==y&&q-> Yexop==2&&q-> Xexop==1)||(q-> X==y&&q-> Y==z&&q-> Xexop==1&&q-> Yexop==2))         //yz2
      SZ[0][1][2]   +=q-> data;
      if((q-> X==z&&q-> Y==y&&q-> Yexop==1&&q-> Xexop==1)||(q-> Y==y&&q-> Y==z&&q-> Yexop==1&&q-> Xexop==1))       //zy
      SZ[0][1][1]   +=q-> data;

      }

      return   0;

}



------解决方案--------------------


将原来的这句
for(q=head; q !=NULL;q=q-> next)//就是这个语句中说有 内存 访问错误
换成下面试试,看看行不行
for(q=head; q !=NULL,n> 0;q=q-> next)//就是这个语句中说有 内存 访问错误

热点排行
Bad Request.