顺序表的添加元素函数无效

问题遇到的现象和发生背景

在学习顺序表时创建了一个添加元素的函数,但是使用该函数后无法将顺序表中的元素进行输出

问题相关代码,请勿粘贴截图
#include 
#include 
#define initSize 100
typedef int DataType;
typedef struct SeqList{
    DataType *data;
    int length;
    int size;

}SeqList;
void initSeqList(SeqList * L){
    L->data=(DataType*)malloc(sizeof(DataType)*initSize);
    if(L->data==NULL){
        printf("初始化顺序表失败");
        return;
    }
    L->length=0;
    L->size=initSize;
}
void addElement(SeqList *L,DataType ele){
    if(L->length+1<=L->size){
        L->data[L->length-1]=ele;
    }else{
       DataType *p=L->data;
       L->data=(DataType*)malloc(sizeof(DataType)*(L->size)*2);
       for(int i=0;i<L->size;i++){
        L->data[i]=p[i];
       }
       L->size=L->size*2;
       free(p);


    }


}
int posDelete(int pos,SeqList *L){
    if(L->data==NULL){
        printf("顺序表为空删除失败");
        return -1;
    }

    if(pos<=0||pos>=L->length){
        printf("输入的位置非法删除失败");
        return -1;
    }
    for(int i=pos;L->length-1;i++){
        L->data[pos]=L->data[pos+1];
    }


    return L->data[pos];



}




int main()
{
    SeqList L;
    initSeqList(&L);

    addElement(&L,11);
    addElement(&L,12);
    addElement(&L,9);
    addElement(&L,15);
    addElement(&L,3);
    for(int i=0;i<L.length;i++){
           printf("%d",L.data[i]);

    }
    return 0;
}






运行结果及报错内容

img

我想要达到的结果

能够正常的输出添加的数据

修改如下

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

#define initSize 100

typedef int DataType;

typedef struct SeqList
{
    DataType *data;
    int length;
    int size;
} SeqList;

void initSeqList(SeqList *L)
{
    L->data = (DataType *)malloc(sizeof(DataType) * initSize);
    if (L->data == NULL)
    {
        printf("初始化顺序表失败");
        return;
    }
    L->length = 0;
    L->size = initSize;
}

void freeSeqList(SeqList *L) {
    free(L->data);
}

void addElement(SeqList *L, DataType ele)
{
    if (L->length >= L->size)
    {
        DataType *p = L->data;
        int newSize = L->size * 2;
        L->data = (DataType *)malloc(sizeof(DataType) * newSize);
        for (int i = 0; i < L->length; i++)
            L->data[i] = p[i];
        L->size = newSize;
        free(p);
    }
    L->data[L->length] = ele;
    L->length++;
}

int posDelete(int pos, SeqList *L)
{
    assert(L->data != NULL);
    assert(pos >= 0 && pos < L->length);
    DataType value = L->data[pos];
    for (int i = pos; i < L->length; i++)
        L->data[i] = L->data[i + 1];
    L->length--;
    return value;
}

int main()
{
    SeqList L;
    initSeqList(&L);

    addElement(&L, 11);
    addElement(&L, 12);
    addElement(&L, 9);
    addElement(&L, 15);
    addElement(&L, 3);

    for (int i = 0; i < L.length; i++)
        printf("%d ", L.data[i]);
    printf("\n");

    freeSeqList(&L);

    return 0;
}