C 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

我对此有一个问题,因为在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;
}
在您的代码中,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];这就解决了问题