用线性表顺序存储结构写的一段插入函数出现了读取访问权限冲突的问题,在下面代码中的星号中,不知道如何修改,感觉指针也没问题,求各位大佬帮帮忙

#include<iostream>
#include<malloc.h>
using namespace std;

#define max 100
#define up 10
typedef struct
{
    char* arr;//建立一个数组 
    int length;//表示数组当前存储个数 
    int listsize;//表示数组存储容量 
}list;
int initlist(list* l)
{
    l->arr = (char*)malloc(max * sizeof(char));
    if (!l->arr)
    {
        cout << "存储空间申请失败" << endl;
        exit(-1);
    }
    l->length = 0;
    l->listsize = max;
    return 0;
}
int append_elem(list* l)
{
    int i;
    for (i = 0; i <= 25; i++)l->arr[i] = 'A' + i;
    l->length = 25;
    return 0;
}

int show_list(list* l)
{
    int i;
    for (i = 0; i <= l->length; i++)
    {
        cout << l->arr[i] << ' ';
    }
    cout << endl;
    return 0;
}
int insert_list(list* l, char a)
{
    int i, j;

    for (i = 0; i <= l->length; i++)
    {
        ******if (a == l->arr[i])******
        {
            for (j = 0; j = l->length-i; j++)
                l->arr[l->length+1-j] = l->arr[l->length-j];
            l->arr[i] = a;
            l->length++;
            return 0;
        }
        else
            cout << "未匹配项" << endl;
    }
    return 0;
}
int main()
{
    char a;
    a = 'A';
    list l;
    initlist(&l);
    append_elem(&l);
    show_list(&l);
    insert_list(&l, a);
    show_list(&l);
    return 0;
}
for (i = 0; i <= l->length; i++)
->
for (i = 0; i < l->length; i++)