错误:分配给' int **'来自不兼容的类型' int [] []

时间:2015-10-07 08:53:28

标签: c arrays struct malloc

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define SIZE 9

typedef struct 
{
    int row;
    int col;
    int** arr;  
}parameters;

// function prototypes
void* checkRow(void* in);
void* checkCol(void* in);
void* checkSect(void* in);


int main(void)
{
    // board to test
    int grid[SIZE][SIZE] = {
                    {6, 5, 3 ,1, 2, 8, 7, 9, 4},
                    {1, 7, 4, 3, 5, 9, 6, 8, 2},
                    {9, 2, 8, 4, 6, 7, 5, 3, 1},
                    {2, 8, 6, 5, 1, 4, 3, 7, 9},
                    {3, 9, 1, 7, 8, 2, 4, 5, 6},
                    {5, 4, 7, 6, 9, 3, 2, 1, 8},
                    {8, 6, 5, 2, 3, 1, 9, 4 ,7},
                    {4, 1, 2, 9, 7, 5, 8, 6, 3},
                    {7, 3, 9, 8, 4, 6, 1, 2, 5}
                 }; 

    printf("Sudoku from Khoa Vo\n");

    int i = 0;
    int j = 0;
    for (i = 0; i < SIZE; i++)
        for (j = 0; j < SIZE; j++)
        {
            printf("%d ", grid[i][j]);
            if(j == SIZE)
                printf("\n");
        }

    // paramenter for column and row threads
    parameters *data = (parameters*) malloc(sizeof(parameters));
    data->row = 0;
    data->col = 0;
    data->arr = grid;
}

我有一个错误,但我无法弄清楚如何解决它,错误在语句data->arr = grid上,错误消息表明'错误:分配给&#39; int **&#39 ;来自不兼容的类型&#39; int [9] [9]。我是否可以获得有关如何解决此错误的建议,请提前感谢。

1 个答案:

答案 0 :(得分:2)

如果是数独的,只需更改结构定义 1

typedef struct 
{
    int row;
    int col;
    int arr[9][9];  
} parameters;

由于int **int[][]不是兼容类型,因为int[][]存储了重叠整数,而int **可以存储重点指针,但整数不是连续的,你不应该强迫一个演员既不是。

要使用值填充arr,您可以使用

memcpy(data->arr, grid, sizeof(data->arr));

因为您无法分配到数组。

另外,使用malloc()时要小心,出错时会返回NULL,在这种情况下,malloc()后面的代码会导致未定义的行为。并do not cast void * in [tag:c]

1 您可以将其定义为指针数组,this comment建议。