为什么只要我使用free函数在这个程序中 就会导致运行时错误呢?

刚刚开始学动态内存,很多地方不明白

图片说明
图片说明
图片说明
图片说明
图片说明图片说明
图片说明

DynamicArray* DynamicArray_new()
{
    DynamicArray* temp = (DynamicArray*)malloc(sizeof(DynamicArray));
    temp->capacity = 16;
    temp->size = 0;
    temp->data = (int*)malloc(sizeof(int) * 16);

    return temp;
}

void DynamicArray_insert(DynamicArray* This, size_t pos, const Elem* v)
{   
    if (This->size + 1 >= This->capacity)
    {
        int* temp = (int*)malloc(sizeof(int) * This->size); 

        for (int i = 0; i < This->size; i++)
        {
            temp[i] = This->data[i];
        }

        //free(This->data);
        This->data = (int*)malloc(sizeof(int) * This->capacity * 2); 

        This->capacity *= 2;

        for (int i = 0; i < This->size; i++)
        {
            This->data[i] = temp[i]; 
        }

    }


        int i = This->size - 1;
        int Pos = pos;

        while(i >= Pos)
        {
            This->data[i + 1] = This->data[i];
            i--;
        }

        This->size++;

        This->data[Pos] = *v;
}

Elem DynamicArray_erase(DynamicArray* This, size_t pos)
{
    This->size--;

    int Temp = This->data[pos];

    for (int i = pos; i < This->size; i++)
    {
        This->data[i] = This->data[i + 1];
    }


    if (This->capacity > 16 && This->size < ((This->capacity) / 4))
    {   
        int *temp = (int*)malloc(sizeof(int) * This->size);

        for(int i = 0;i < This->size;i++)
            temp[i] = This->data[i];


        //free(This->data);

        This->data = (int*)malloc(sizeof(int) * This->capacity / 4);

        for(int i = 0;i < This->size;i++)
        {
            This->data[i] = temp[i];
        }

        This->capacity /= 4;
    }

    return Temp;
}

Elem DynamicArray_get(const DynamicArray* This, size_t pos)
{
    return This->data[pos];
}

void DynamicArray_set(DynamicArray* This, size_t pos, const Elem* v)
{
    This->data[pos] = *v;
}

size_t DynamicArray_capacity(const DynamicArray* This)
{
    size_t T = This->capacity;
    return T;
}

size_t DynamicArray_size(const DynamicArray* This)
{
    size_t T = This->size;
    return T;
}

bool DynamicArray_empty(const DynamicArray* This)
{
    if (This->size == 0)
        return true;
    else
        return false;
}

void DynamicArray_resize(DynamicArray* This, size_t new_size)
{
    int Size = This->size;
    This->size = new_size;

    if(This->size >= This->capacity)
    {
        int *temp = (int*)malloc(sizeof(int) * This->size);

        for(int i = 0;i < This->size;i++)
        {
            temp[i] = This->data[i];
        }



        //free(This->data);
        This->data = (int*)malloc(sizeof(int) * This->capacity * 2);

        This->capacity *= 2;

        for(int i = 0;i < Size;i++)
        This->data[i] = temp[i];

        return ;
    }

    else if(This->size < This->capacity / 4 && This->capacity > 16)
    {
        int *temp = (int*)malloc(sizeof(int) * This->size);

        for(int i = 0;i < This->size;i++)
        {
            temp[i] = This->data[i];
        }

        //free(This->data);

        while(This->size < This->capacity && This->capacity > 16)
        This->capacity /= 2;

        This->data = (int*)malloc(sizeof(int) * This->capacity);

        for(int i = 0;i < Size;i++)
        This->data[i] = temp[i];

        return ;

    }

    int* a = (int*)malloc(sizeof(int) * This->size);

    for (int i = 0; i < This->size; i++)
    {
        a[i] = This->data[i];
    }

    //free(This->data);

    This->data = (int*)malloc(sizeof(int) * This->capacity);

    for(int i = 0;i < Size;i++)
    {
        This->data[i] = a[i];   
    }
}

void DynamicArray_delete(DynamicArray* This)
{
    This->size = 0;
    This->capacity = 0; 

    //free(This->data);
}

你这个data是个数组,应该free;