我设法将问题缩小到此代码段:
#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]
时没关系。但除此之外的其他任何事情都会导致段错误。
我的分配错了吗?还是别的什么?
答案 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]));
}