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

Warning assignment from incompatible pointer type

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

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

第一次警告:

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 个块)并在 "a" 变量中分配一个 2x2 二维数组。

我做错了什么?

您收到警告是因为该函数被声明为 return int*(一个星号指针),但您 return 指向指针 int**,两个星号指针。

您可以通过将函数 return 类型声明为 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;
}