【发布时间】:2021-05-09 19:36:43
【问题描述】:
我对这段代码有一个问题:我不知道如何将引用传递给结构中的矩阵。
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
struct detA{
int** matrix;
int flag;
int result;
};
void* det3x3 (void* arguments){
struct detA* tmp = (struct detA *) arguments;
if(tmp->flag){
/*Quando il flag è uno sono nel thread A*/
tmp->result = (tmp->matrix[0][0] * tmp->matrix[1][1] * tmp->matrix[2][2]) +
(tmp->matrix[0][1] * tmp->matrix[1][2] * tmp->matrix[2][0]) +
(tmp->matrix[0][2] * tmp->matrix[1][0] * tmp->matrix[2][1]);
return (void*)&(tmp->result);
}
else{
/*Quando il flag è zero sono nel thread B*/
tmp->result = (tmp->matrix[2][0] *tmp->matrix[1][1] * tmp->matrix[0][2]) +
(tmp->matrix[2][1] * tmp->matrix[1][2] * tmp->matrix[0][0]) +
(tmp->matrix[2][2] * tmp->matrix[1][0] * tmp->matrix[0][1]);
return (void*)&(tmp->result);
}
}
int main(){
pthread_t t1_id;
pthread_t t2_id;
int* t1_returnValue;
int* t2_returnValue;
int A [3][3] = {{1,1,1}, {1,1,1}, {1,1,1}};
struct detA t1_args;
struct detA t2_args;
t1_args.matrix = A;
t1_args.flag = 1;
t2_args.matrix = A;
t2_args.flag = 0;
pthread_create(&t1_id, NULL, &det3x3, &t1_args);
pthread_create(&t2_id, NULL, &det3x3, &t2_args);
pthread_join(t1_id, (void**)&t1_returnValue);
pthread_join(t2_id, (void**)&t2_returnValue);
int det = (*t1_returnValue) - (*t2_returnValue);
printf("Il determinante della matrice è: %d", det);
return 0;
}
编译此代码时,将矩阵分配给 int** 时出现错误。 会是什么呢?在之前的练习中,我通过在结构中放入一个 int * 对普通数组进行了同样的操作。
【问题讨论】: