我有功能转换数组中的列表:
void* list_to_array(SList* list)
{
int i;
int array_size = list_get_length(list);
void* array[array_size];
for (i = 0; i < array_size; i++)
{
array[i] = list_get_n_data(list,i);
}
return *array;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试测试它时:
int* a = (int*)list_to_array(list);
printf("%d" (int)a);
Run Code Online (Sandbox Code Playgroud)
没关系.我看到第一个元素.但是当我试图获得第二或第三个元素时:
int* a = (int*)list_to_array(list);
a++;
printf("%d" (int)a);
Run Code Online (Sandbox Code Playgroud)
我看到第一个元素+ 4.如果我尝试获得第三个元素我看到第一个元素值+ 8等等...为什么?怎么了?
谢谢
您正在返回指向堆栈内存位置的指针.一旦函数返回,该内存区域就不再有效.
而且,您没有实际返回指向数组的指针,而是返回数组中的第一个元素.以下代码将返回1,而不是指针数组.
int array[] {1, 2, 3, 4};
return *array
Run Code Online (Sandbox Code Playgroud)
您可能只需要对代码进行最少的更改即可使其工作.
void** array = (void **) malloc(sizeof(void *) * array_size);
...
return array;
Run Code Online (Sandbox Code Playgroud)
只需确保释放array完成后使用的内存.
void **array = list_to_array(list);
// Use array
...
// Finished with array
free(array);
Run Code Online (Sandbox Code Playgroud)