C语言三元组的加法程序问题

请问以下代码哪里有错误?

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

#define maxsize 100

typedef struct
{
    int i, j, e;//非零元的行下表、列下标以及元本身
}triple;

typedef struct
{
    triple data[maxsize];//存储三元组的数组
    int mu, nu, tu;//行数、列数以及非零元个数
}tsmatrix;

tsmatrix* create1()
{
    int m = 3, n = 3, k = 0, t = 0,temp;
    tsmatrix* matrix1;
    matrix1 = (tsmatrix*)malloc(sizeof(tsmatrix));
    FILE* fp1 = fopen("D:\\code\\三元组\\三元组1.txt", "r");
    for (k = 0; !feof(fp1); k++)
    {
        fscanf(fp1, "%d", &temp);
        if (temp != 0)
        {
            matrix1->data[t].i = k / n + 1;
            matrix1-> data[t].j = k % n + 1;
            matrix1->data[t].e = temp;
            t++;
        }
    }
    matrix1->tu = t;
    fclose(fp1);
    return matrix1;
}

tsmatrix* create2()
{
    int m = 3, n = 3, k = 0, t = 0, temp;
    tsmatrix* matrix2;
    matrix2 = (tsmatrix*)malloc(sizeof(tsmatrix));
    FILE* fp2 = fopen("D:\\code\\三元组\\三元组2.txt", "r");
    for (k = 0; !feof(fp2); k++)
    {
        fscanf(fp2, "%d", &temp);
        if (temp != 0)
        {
            matrix2->data[t].i = k / n + 1;
            matrix2->data[t].j = k % n + 1;
            matrix2->data[t].e = temp;
            t++;
        }
    }
    matrix2->tu = t;
    fclose(fp2);
    return matrix2;
}

tsmatrix*and (tsmatrix* m, tsmatrix* n)
{
    int t=0;
    triple* p = &m->data, * k = &n->data;
    tsmatrix* a;
    a = (tsmatrix*)malloc(sizeof(tsmatrix));
    
    while (p && k)
    {
        if (p->i == k->i)
        {
            if (p->j == k->j)
            {
                a->data[t].e = p->e + k->e;
                if (a->data[t].e == 0)
                {
                    k++;
                    p++;
                }
                else
                {
                    a->data[t].i = p->i;
                    a->data[t].j = p->j;
                    t++;
                    p++;
                    k++;
                }
                //continue;
            }
            else if (p->j < k->j)
            {
                a ->data[t].i = p->i;
                a ->data[t].j = p->j;
                a ->data[t].e = p->e;
                t++;
                p++;
            }
            else
            {
                a ->data[t].i = k->i;
                a ->data[t].j = k->j;
                a ->data[t].e = k->e;
                t++;
                k++;
            }
        }
        else if (p->i > k->i)
        {
            a ->data[t].i = k->i;
            a ->data[t].j = k->j;
            a ->data[t].e = k->e;
            t++;
            k++;
        }
        else
        {
            a ->data[t].i = p->i;
            a ->data[t].j = p->j;
            a ->data[t].e = p->e;
            t++;
            p++;
        }
    }
    if (p == NULL)
    {
        while (k)
        {
            a ->data->i = k->i;
            a ->data->j = k->j;
            a ->data->e = k->e;
        }
    }
    if (k == NULL)
    {
        while (p)
        {
            a ->data->i = p->i;
            a ->data->j = p->j;
            a ->data->e = p->e;
        }
    }
    a ->tu = t;
    return a;
}

int main()
{
    tsmatrix* matrix1 = create1();
    tsmatrix* matrix2 = create2();
    tsmatrix* matrix3 = and(matrix1,matrix2);

    int t;
    for (t = 0; t < matrix3->tu; t)
        printf("%d %d %d\n", matrix3->data[t].i, matrix3->data[t].j, matrix3->data[t].e);
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^