#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]。我是否可以获得有关如何解决此错误的建议,请提前感谢。
答案 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建议。。