写顺序表时为什么会报错


#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(once:4996)
#include 
#include 
#define LISTINITSIZE 8

typedef struct SeqList
{
    int* pData;
    int size;//表示数组中存储了多少个数据
    int capacity;//数组实际能存数据的空间容量的大小
}SeqList;

void SeqListCheckCapacity(SeqList* ps)
{
    //如果没有空间或者空间不足,就扩容
    if (ps->size == ps->capacity) {
        int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
        int* tmp = (int*)realloc(ps->pData, newcapacity * sizeof(int));
        if (tmp == NULL) {
            printf("realloc fail!\n");
            exit(-1);
        }

        ps->pData = tmp;
        ps->capacity = newcapacity;
    }
}

void InitList(SeqList* ps)
{
    ps->pData = (int*)malloc(LISTINITSIZE * sizeof(int));
    if (ps->pData == NULL) printf("malloc fail!");
    ps->capacity = LISTINITSIZE;
    ps->size = 0;
}

void DestroyList(SeqList* ps)
{
    if (ps && ps->pData != NULL) {
        free(ps->pData);
        ps->pData == NULL;
    }
    ps->size = 0;
    ps->capacity = 0;
}

void ClearList(SeqList* ps)
{
    if (ps->capacity != 0)
        ps->capacity = 0;
}

bool ListEmpty(SeqList ps)
{
    for (int i = 0; i < ps.capacity; i++) {
        if (ps.pData[i] != NULL) return false;
    }
    return true;
}

void ListLength(SeqList* ps)
{
    for (int i = 0; i < ps->capacity; i++) {
        if (ps->pData[i] != 0) ps->size += 1;
    }
    printf("线性表长度为:%d", ps->size);
}

int GetElem(SeqList ps, int i, int* elem)
{
    if (i < i || i > ps.capacity) exit(-1);
    elem = ps.pData[i - 1];
    return elem;
}

int LocateElem(SeqList ps, int e)
{
    for (int i = 0; i < ps.size; i++) {
        if (ps.pData[i] == e) {
            return i;
        }
    }
    return 0;
}

int PriorElem(SeqList ps, int cur_e, int* pre_e)
{
    if (ps.pData[0] != cur_e) {
        for (int i = 1; i < ps.size; i++) {
            if (ps.pData[i] == cur_e) {
                pre_e = ps.pData[i - 1];
                return pre_e;
            }
        }
    }
    if (pre_e == NULL) exit(-1);
}

int NextElem(SeqList ps, int cur_e, int* next_e)
{
    if (ps.pData[ps.size - 1] != cur_e) {
        for (int i = 0; i < ps.size - 1; i++) {
            if (ps.pData[i] == cur_e) {
                next_e = ps.pData[i + 1];
                return next_e;
            }
        }
    }
    if (next_e == NULL) exit(-1);
}

void ListTraverse(SeqList ps)
{
    for (int i = 0; i < ps.size; i++) {
        printf(ps.pData[i]);
    }
}

int SetElem(SeqList* ps, int i, int* e)
{
    if (i < i || i > ps->size) exit(-1);
    int tmp = ps->pData[i - 1];
    ps->pData[i - 1] = e;
    e = tmp;
    return e;
}

void InsertElem(SeqList* ps, int i, int e)
{
    if (i<1 || i>ps->size + 1) exit(-1);
    SeqListCheckCapacity(&ps);
    for (int j = ps->size - 1; j >= i - 1; j++) {
        ps->pData[j + 1] = ps->pData[j];
    }
    ps->pData[i - 1] = e;
    ps->size += 1;
}

void DeleteElem(SeqList* ps, int i, int* e)
{
    if (i<1 || i>ps->size + 1) exit(-1);
    e = ps->pData[i - 1];
    for (int j = i; j <= ps->size - 1; j++)
    {
        ps->pData[j - 1] = ps->pData[j];
    }
    ps->size -= 1;
}

void testSeqList()
{
    SeqList ps;
    InitList(&ps);
    for (int i = 0; i < 5; i++) ps.pData[i] = 1;
    ListLength(&ps);
}

int main()
{
    testSeqList();
    return 0;
}

img

正常应该没有问题,出错的时候有没有打印下面这句话? malloc fail!
if (ps->pData == NULL) printf("malloc fail!");