所以我正在搞乱动态分配以更好地理解它,我遇到了"来自不兼容指针类型的警告分配"在我的代码中警告两次,我不知道为什么。
基本上我要做的是动态分配动态分配的二维数组的队列。
第一次警告:
int * int_alloc_2d(unsigned int rows, unsigned int cols){
int **array;
int i;
array = (int **)malloc(sizeof(int*)*rows);
for(i=0;i<rows;i++)
array[i]=(int*)malloc(sizeof(int)*cols);
return array;
}
第一个警告显示在return array;
行。此函数用于动态分配二维数组
第二次警告:
int main(int argc, char **argv){
QUEUE *queue;
queue = (QUEUE *)malloc(sizeof(QUEUE));
int **a;
a = int_alloc_2d(2,2);
return 0;
}
第二个警告显示在a = int_alloc_2d(2,2);
行。这里我只是为队列分配内存(只有1个块)并在&#34; a&#34;中分配2x2 2维数组。变量
我做错了什么?
答案 0 :(得分:1)
您收到警告,因为该函数被声明为返回int*
(一个星号指针)但您返回一个指向指针int**
的指针,这是一个两个星号指针。
您可以通过将函数返回类型声明为int**
:
int ** int_alloc_2d(unsigned int rows, unsigned int cols){
int **array;
int i;
array = malloc(sizeof(int*)*rows);
for(i=0;i<rows;i++)
array[i]=malloc(sizeof(int)*cols);
return array;
}