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

我的这个链表为什么会有 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平方的系数