gpt4 book ai didi

c - pthread_join 中的段错误

转载 作者:行者123 更新时间:2023-11-30 17:07:42 25 4
gpt4 key购买 nike

我对此有疑问,因为在 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 *) code>(通常为 8 个字节)。

您可能希望将 resultado 的类型更改为 int *resultado[filas][columnas];然后将 join 代码更改为 pthread_join(id[hilo],(void*) &resultado[i][j]);。不要忘记那里的“&”,因为您需要一个指针。

PS:1. 您应该看到编译器发出的此警告,不要忽略它。

warning: cast to 'void *' from smaller integer type 'int' [-Wint-to-void-pointer-cast]
  • 尽量不要使用非英语作为变量名称,尤其是在提问时......
  • 关于c - pthread_join 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33986685/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com