C pthread_join中的分段错误
我对此有一个问题,因为在pthread_join中获得响应的那一刻,程序有一个分段错误,我不知道如何解决这个问题 这是我的密码:C pthread_join中的分段错误,c,pthreads,C,Pthreads,我对此有一个问题,因为在pthread_join中获得响应的那一刻,程序有一个分段错误,我不知道如何解决这个问题 这是我的密码: #include <pthread.h> #include <stdio.h> #include <stdlib.h> struct matricez{ int matriz; int multiplica; }; void* multiplicacion(void* estructura){ struc
#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;
}
在您的代码中,resultado[i][j]是一个int,通常为4个字节,它被强制转换为void*通常为8个字节
您可能希望将resultado的类型更改为int*resultado[filas][columnas];
然后将连接代码更改为pthread_joinid[hilo],void*&resultado[i][j];。不要忘记那里的“&”,因为您需要一个指针
附言:
1.您应该在编译器中看到这个警告,不要忽略它
warning: cast to 'void *' from smaller integer type 'int' [-Wint-to-void-pointer-cast]
尽量不要使用非英语作为变量名,尤其是在提问时。。。
pthread_joinid[hilo]、void*&resultado[i][j];这就解决了问题