我遇到了这个问题,因为在pthread_join
中获得响应时,程序会出现分段错误,而且我不知道如何解决这个问题。
这是我的代码:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
struct matricez{
int matriz;
int multiplica;
};
void* multiplicacion(void* estructura){
struct matricez* valores=(struct matricez*)estructura;
int uno=valores->matriz;
int dos=valores->multiplica;
int tres=uno*dos;
printf("entre y saque %d \n",tres);
return (void*)tres;
}
int main(int argc,char* argv[]){
if(argc!=3){
printf("Ingrese las dimensiones de fila y columna de la matriz");
exit(1);
}
int filas=atoi(argv[1]);
int columnas=atoi(argv[2]);
pthread_t id[filas*filas];
int matriz[filas][columnas];
int multiplica[filas][columnas];
int resultado[filas][columnas];
int i;
int j;
for(i=0;i<filas;i++){
for(j=0;j<columnas;j++){
matriz[i][j]=rand()%11;
multiplica[i][j]=rand()%11;
printf("posicion %d,%d=%d \n",i,j,matriz[i][j]);
printf("posicion %d,%d=%d \n",i,j,multiplica[i][j]);
}
}
struct matricez valores;
int hilo=0;
for(i=0;i<filas;i++){
for(j=0;j<columnas;j++){
valores.matriz=matriz[i][j];
valores.multiplica=multiplica[i][j];
pthread_create(&id[hilo],NULL,multiplicacion,&valores);
pthread_join(id[hilo],(void*)resultado[i][j]);
hilo++;
}
}
return 0;
}
答案 0 :(得分:0)
在您的代码中,resultado[i][j]
是int
(通常为4个字节),其转换为(void *)
(通常为8个字节)。
您可能希望将resultado
的类型更改为int *resultado[filas][columnas];
然后将join
代码更改为pthread_join(id[hilo],(void*) &resultado[i][j]);
。不要忘记&#39;&amp;&#39;因为你需要一个指针。
PS: 你应该看到编译器发出这个警告,不要忽略它。
warning: cast to 'void *' from smaller integer type 'int' [-Wint-to-void-pointer-cast]