我正在使用这个方法
void * col_check(void * params) {
parameters * data = (parameters *) params;
int startRow = data->row;
int startCol = data->col;
int *colm = malloc(9);
for (int i = startCol; i < 9; ++i) {
int col[10] = {0};
for (int j = startRow; j < 9; ++j) {
int val = data->arr1[j][i];
if (col[val] != 0) {
colm[i]=i;
}
else{
col[val] = 1;
}
}
}
return colm;
}
我希望能够将colm数组中的值传递到主程序中。因此,我使用以下代码行来实现。基本上,colm数组存储的是arr1的列索引,而这些索引根据数独规则无效(不重要)。
parameters * param10 = (parameters *) malloc(sizeof(parameters));
param10->row = 0;
param10->col = 0;
param10->arr1 = arr1;
void * cols;
pthread_create(&thread_10, NULL, col_check, (void *) param10);
pthread_join(thread_10, &cols);
printf("Calculating column validity please wait.\n");
sleep(mdelay);
int c;
int value= (int)cols[1];
当我尝试将cols1中的值赋给变量"value"时,出现了"操作数类型为'void',需要算术或指针类型"的错误。我做错了什么?有什么建议吗?完整代码在这里。
col_check
中的malloc(9)
应该改为malloc(sizeof(int) * 9)
。 - Roguscalloc(9, sizeof(int))
。 - ranuvoid*
,可以分配给任何其他指针。强制类型转换只会使代码混乱,使其更难以理解、调试等。 2)始终检查(!=NULL)返回的值,以确保操作成功。 - user3629249void * cols;
应该改为:int * cols;
。 - user3629249