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

时间:2016-05-11 17:15:02

标签: c arrays pointers free 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]时没关系。但除此之外的其他任何事情都会导致段错误。

我的分配错了吗?还是别的什么?

1 个答案:

答案 0 :(得分:1)

应该是

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]));
}