如何释放空指针的空数组?

How to free void array of void pointers?

我设法将我的问题缩小到这个代码片段:

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

int main()
{
    void **arr;
    int max = 10; //tr = 0;
    int size = sizeof(int);

    arr = malloc(max*sizeof(void*));

    for (int i=0; i<=6; i++)
    {
        arr[i] = malloc(size);
        memcpy(arr+i, &i, size);
    }

    for (int i=0; i<=6; i++)
    {
        printf("%d ", *(int*)(arr + i));
    }

    free(arr[0]);
    free(arr[1]);

    free(arr);
    return 0;
}

空闲的时候还可以arr,空闲的时候可以arr[0]。但除此之外,我遇到了段错误。

我是不是分配有误?还是其他原因?

应该是

for (int i=0; i<=6; i++)
{
    arr[i] = malloc(size);
    memcpy(arr[i], &i, size);
}

for (int i=0; i<=6; i++)
{
    printf("%d ", *(int*)(arr[i]));
}