来自不兼容指针类型的警告分配

时间:2016-02-24 22:10:22

标签: c pointers dynamic-allocation

所以我正在搞乱动态分配以更好地理解它,我遇到了"来自不兼容指针类型的警告分配"在我的代码中警告两次,我不知道为什么。

基本上我要做的是动态分配动态分配的二维数组的队列。

第一次警告:

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维数组。变量

我做错了什么?

1 个答案:

答案 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;
}