Como acceder a los campos de un estructura que tiene apuntadores** hilo
Publicado por carlos alberto (1 intervención) el 12/09/2016 07:08:21
Hola buenas noches
Mi duda es la siguiente he creado un programa en que recibe un valor de n y con ese valor crea 2 matrices de nxn para poder ser multiplicadas, estoy usando hilos cada hilo harauna operacion para multiplicar la matriz uno una fila otro una columna y así , su prototipo es void* multiplica( void¨* ) entonces como parametro de funcion estoy enviando un apuntador a struct en ella inicializado los datos pero no puedo acceder a ellos, alguna sugerencia ?
Gracias amigos.
Mi duda es la siguiente he creado un programa en que recibe un valor de n y con ese valor crea 2 matrices de nxn para poder ser multiplicadas, estoy usando hilos cada hilo harauna operacion para multiplicar la matriz uno una fila otro una columna y así , su prototipo es void* multiplica( void¨* ) entonces como parametro de funcion estoy enviando un apuntador a struct en ella inicializado los datos pero no puedo acceder a ellos, alguna sugerencia ?
Gracias amigos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
typedef struct {
int *** ptr;
int ***ptr2;
int fila;
int colum;
int num;
}datos;
// int** ptr, int** ptr2, int fila, int colum, int num
void* multiplica ( void* args);
int main(){
int n;
int fil,col;
datos *aptdatos, a1;
aptdatos = &a1;
printf("\n\n Se crearan 2 matricez de nxn \n\n");
printf("valor de n --> ");
scanf("%d", &n);
pthread_t hilos[n];
/* Inicializamos las matrices */
int **mat1=(int **)malloc(sizeof(int *)*n);
int **mat2=(int **)malloc(sizeof(int *)*n);
for(int i=0; i<n; i++)
{
mat1[i]=(int *)malloc(sizeof(int )*n);
mat2[i]=(int *)malloc(sizeof(int )*n);
}
// 0 1
// Le damos valores empezadon de 0 ejemplo si n = 2 2 3
int cont=0;
for( int i=0; i<n; i++ ) {
for( int j=0; j<n; j++ ) {
mat1[i][j] = cont;
mat2[i][j] = cont;
cont++;
}
}
// De esta forma llamamos a los hilos donde i y j es la fila y columna correspondiente que les Toca
for( int i=0; i<n; i++ ) {
for( int j=0; j<n; j++ ){
//inicializo los datos de la estructura
aptdatos->fila = i;
aptdatos->num = n;
aptdatos->colum = j;
aptdatos->ptr = &mat1;
aptdatos->ptr2 = &mat2;
pthread_create(&hilos[i], NULL, multiplica, aptdatos );
pthread_join(hilos[i],NULL);
pthread_exit(NULL);
}
printf( "\n" );
}
free(mat1);
free(mat2);
return 0;
}
void* multiplica ( void* args ){
int cont=0;
for(int j=0; j< args.num ; j++){ //AQUI ES DONDE ESTA EN ERROR DE ESTA FORMA LO INTENTE
cont = ptr[fila][j] * ptr2[j][colum] + cont;
}
printf( " %d ", cont );
return cont;
}
Valora esta pregunta
0