如何释放空指针的空数组?
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]));
}
我设法将我的问题缩小到这个代码片段:
#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]));
}