我有一个函数可以创建一个指针数组。分配内存的函数通过传递给函数的参数返回新的内存指针。它可以重现该问题的最简单的代码如下:实际参数指针不匹配?
void foo (void** new_mem, size_t bytes)
{
*new_mem = malloc(bytes);
}
int main (void)
{
int** ptr_arr; // Want to create an array of pointers
foo(&ptr_arr, sizeof(int*)*100); // Create an array size of 100
// compiler emits warning:
// 'void **' differs in levels of indirection from 'int ***'
return 0;
}
我能投传给foo的像这样的第一个参数:但是“(无效**)& ptr_arr”摆脱的警告,我想知道:是否有更合适的解决方案?
所以这听起来像解决方案是使用一个中间的'void *',它将包含新的内存地址,然后设置int **到中间void *。 – Andrew 2010-09-01 16:00:43
@Andrew:不,使用中间的'void *'不会奇迹般地使转换有效。如果在'T *'和'U *'之间转换无效,那么'T *'将'void *'转换为'U *'也是无效的;但C不会提醒你。 – 2010-09-02 08:56:39