pthread_join中的分段错误

时间:2015-11-29 18:56:16

标签: c pthreads

我遇到了这个问题,因为在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;
}

1 个答案:

答案 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]
  1. 尽量不要使用非英语作为变量名,特别是在提问时......