矩阵相加出现bug,调试发现相加后矩阵里面保存的数据没问题,但是输出不对,求解决

C做的矩阵相加的程序,用的三元矩阵保存,以图形输出矩阵。
经过调试,两个矩阵相加之后,三元矩阵中保存的数据是正确的,但是图形输出相加矩阵的时候矩阵却不对,而且两个初始矩阵用图形输出的方法时却是正确的,找不到我的display2函数中存在的问题,求解决!
代码如下:

#include "stdio.h"
#define maxsize 20
typedef struct matrix
{
    int line[maxsize];
    int column[maxsize];
    int data[maxsize];
    int size;
}matrix;

void matrix_init(matrix* l)
{
    l->size = 0;
}

void matrix_display1(matrix* l)
{
    printf("data\tline\tcolumn\n");
    for (int i = 0; i < l->size; i++)
    {
        printf("%d\t%d\t%d\n", l->data[i], l->line[i], l->column[i]);
    }
}

int find_the_maxline(matrix* l)
{
    int max = l->line[0];
    for (int i = 1; i < l->size; i++)
    {
        if (l->line[i] > max)
            max = l->line[i];
    }
    return max;
}
int find_the_maxcolumn(matrix* l)
{
    int max = l->column[0];
    for (int i = 1; i < l->size; i++)
    {
        if (l->column[i] > max)
            max = l->column[i];
    }
    return max;
}

void matrix_display2(matrix* l)
{
    int i, j, t;
    int maxline = find_the_maxline(l);
    int maxcolumn = find_the_maxcolumn(l);
    for (i = 0; i <= maxline; i++)
    {
        for (j = 0; j <= maxcolumn; j++)
        {
            for (t = 0; t < l->size; t++)
            {
                if (l->line[t] == i && l->column[t] == j)
                {
                    printf("%d ", l->data[t]);
                    break;
                }
                if (t == l->size - 1)
                {
                    printf("0 ");
                }
            }
        }
        printf("\n");
    }
}


void data_add(matrix* l, int x, int y, int z)
{
    l->data[l->size] = x;
    l->line[l->size] = y;
    l->column[l->size] = z;
    l->size++;
}

void matrix_add(matrix* l1, matrix* l2)
{
    int status;
    for (int i = 0; i < l2->size; i++)
    {
        status = 1;
        for (int t = 0; t < l1->size; t++)
        {
            if (l2->line[i] == l1->line[t] && l2->column[i] == l1->column[t])
            {
                l1->data[t] = l1->data[t] + l2->data[i];
                status = 0;
            }
            if (status == 0)
                break;
            if (t == l1->size - 1)
            {
                data_add(l1, l2->data[i], l2->line[i], l2->column[i]);
            }
        }
    }
}

int main()
{
    matrix l1,l2;
    matrix_init(&l1);
    matrix_init(&l2);
    data_add(&l1, 1, 2, 3);
    data_add(&l1, 1, 2, 4);
    data_add(&l1, 1, 3, 3);
    data_add(&l1, 3, 5, 3);
    data_add(&l1, 4, 6, 3);

    data_add(&l2, 1, 3, 1);
    data_add(&l2, 1, 2, 4);
    data_add(&l2, 1, 6, 4);
    data_add(&l2, 3, 5, 2);
    data_add(&l2, 4, 1, 3);
    matrix_display2(&l1);
    printf("\n");
    matrix_display2(&l2);
    printf("\n");
    matrix_add(&l1, &l2);
    matrix_display2(&l1);
    return 0;
}


#include "stdio.h"
#define maxsize 20
typedef struct matrix
{
    int line[maxsize];
    int column[maxsize];
    int data[maxsize];
    int size;
}matrix;

void matrix_init(matrix* l)
{
    for (int i = 0; i < maxsize; i++)
    {
        l->data[i] = 0;
    }

    l->size = 0;
}

void matrix_display1(matrix* l)
{
    printf("data\tline\tcolumn\n");
    for (int i = 0; i < l->size; i++)
    {
        printf("%d\t%d\t%d\n", l->data[i], l->line[i], l->column[i]);
    }
}

int find_the_maxline(matrix* l)
{
    int max = l->line[0];
    for (int i = 1; i < l->size; i++)
    {
        if (l->line[i] > max)
            max = l->line[i];
    }
    return max;
}
int find_the_maxcolumn(matrix* l)
{
    int max = l->column[0];
    for (int i = 1; i < l->size; i++)
    {
        if (l->column[i] > max)
            max = l->column[i];
    }
    return max;
}

void matrix_display2(matrix* l)
{
    int i, j, t;
    int maxline = find_the_maxline(l);
    int maxcolumn = find_the_maxcolumn(l);
    for (i = 0; i <= maxline; i++)
    {
        for (j = 0; j <= maxcolumn; j++)
        {
            for (t = 0; t < l->size; t++)
            {
                if (l->line[t] == i && l->column[t] == j)
                {
                    printf("%d ", l->data[t]);
                    break;
                }
                if (t == l->size - 1)
                {
                    printf("0 ");
                }
            }
        }
        printf("\n");
    }
}


void data_add(matrix* l, int x, int y, int z)
{
    l->data[l->size] = l->data[l->size] + x;
    l->line[l->size] = y;
    l->column[l->size] = z;
    l->size++;
}

void matrix_add(matrix* l1, matrix* l2)
{

    for (int i = 0; i < l2->size; i++)
    {

        data_add(l1, l2->data[i], l2->line[i], l2->column[i]);
    }
}

int main()
{
    matrix l1, l2;
    matrix_init(&l1);
    matrix_init(&l2);
    data_add(&l1, 1, 2, 3);
    data_add(&l1, 1, 2, 4);
    data_add(&l1, 1, 3, 3);
    data_add(&l1, 3, 5, 3);
    data_add(&l1, 4, 6, 3);

    data_add(&l2, 1, 3, 1);
    data_add(&l2, 1, 2, 4);
    data_add(&l2, 1, 6, 4);
    data_add(&l2, 3, 5, 2);
    data_add(&l2, 4, 1, 3);
    matrix_display2(&l1);
    printf("\n");
    matrix_display2(&l2);
    printf("\n");
    matrix_add(&l1, &l2);
    matrix_display2(&l1);
    return 0;
}

img