elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Confusión: arreglo de arreglo de strings (o con punteros)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Confusión: arreglo de arreglo de strings (o con punteros)  (Leído 892 veces)
Skali

Desconectado Desconectado

Mensajes: 100



Ver Perfil
Confusión: arreglo de arreglo de strings (o con punteros)
« en: 18 Mayo 2018, 16:32 pm »

Buenas, me estoy haciendo un lio barbaro con los tipos en C. Estoy trabajando con strings y MPI. Necesito una variable que almacene un array de textos, en la que cada texto sería un array de strings, en el que cada string es un array de char...

Cada proceso worker necesita encontrar las 5 palabras que más aparecen en un texto. Hasta ahora lo que podría hacer es:

Código
  1. char palabrasQueMasAparecen[5][tamanioPalabra];

o bien:

Código
  1. char *palabrasQueMasAparecen[5];
  2.  
  3. for(int palabra=0; palabra<5; palabra++) {
  4.      palabrasQueMasAparecen[palabra] = (char *) malloc(sizeof(char) * tamanioPalabra);
  5. }

El asunto es que necesito almacenar en una misma variable, las palabras que más aparecen de cada uno de los procesos. Entonces pensé en algo como:

Código
  1. char palabrasQueMasAparecen[cantProcesos][5][tamanioPalabra];

o bien:

Código
  1. char *palabrasQueMasAparecen[cantProcesos][5];
  2.  
  3. for(int proceso=0; proceso<5; proceso++) {
  4. for(int palabra=0; palabra<5; palabra++) {
  5. palabrasQueMasAparecen[proceso][palabra] = (char *) malloc(sizeof(char) * tamanioPalabra);
  6. }
  7. }

El problema es que cada proceso tiene que enviar las 5 palabras que más usa al proceso maestro, a través de la función MPI_Send(), cuyo primer parámetro es la dirección de un buffer.

Como cada proceso debería enviar sus 5 palabras, yo pensé que cada uno debería enviar como primer parámetro de ésta función:
Código
  1. &palabrasQueMasAparecen[idProceso];

pero el programa está crasheando cuando lo quiero correr, y estoy seguro de que estoy usando mal los tipos, y estoy enviando mal el primer parámetro a dicha función... Necesitaría que me den una idea de como usar los tipos correctamente para resolver éste problema.

Muchas gracias desde ya!


« Última modificación: 18 Mayo 2018, 16:38 pm por Skali » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.513



Ver Perfil
Re: Confusión: arreglo de arreglo de strings (o con punteros)
« Respuesta #1 en: 18 Mayo 2018, 17:49 pm »

Si lo haces con arrays de punteros
Código:
char* miArray[5]
deberás usar *alloc para conseguir dimensionar memoria antes de guardar una cadena en ella. Y cuando acabes con esas cadenas destruirlas con free. A lo mejor se te rompe por eso.

En cambio si todo son arrays ya tienes la memoria dimensionada, pero a diferencia de los punteros dimensionados con *alloc su ámbito empieza en la función que los declaró, ten presente eso.

Sea como sea a la hora de entregar palabras recuerda que tanto punteros como arrays se comportan como punteros y una función que espere un char* muy amablemente va a acoger un array:
Tanto si has hecho
Código:
char* miArray[AGENTE][PALABRAS]
cómo
Código:
char miArray[AGENTE][PALABRAS][LETRAS]
puedes pasar a la función que espera un char*
Código:
MiFuncion(miArray[nAgente][nPalabra])


« Última modificación: 18 Mayo 2018, 17:50 pm por MAFUS » En línea

Skali

Desconectado Desconectado

Mensajes: 100



Ver Perfil
Re: Confusión: arreglo de arreglo de strings (o con punteros)
« Respuesta #2 en: 18 Mayo 2018, 18:03 pm »

Hola MAFUS! Gracias nuevamente por tu atención, es muy valorada! Siempre me haces dar cuenta que estoy planteando las cosas bien y que el error esta en otro lugar. Ahora me está funcionando con arreglos de 3 dimensiones. De tanto que toquetié la verdad que no se donde estaba el error, pero seguro me equivoque declarando mal otra variable o algo...

Aprovechando ésta situación, me gustaría preguntarte cuál es la manera más simple para depurar el código cuando crashea. Corregir los errores que devuelve el compilador suele ser facil, pero cuando ocurre algun segmentation fault o crasheos similares, cuál sería el procedimiento mas facil para chequear el código en busca del culpable?

Muchisimas gracias nuevamente.

Saludos!
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.513



Ver Perfil
Re: Confusión: arreglo de arreglo de strings (o con punteros)
« Respuesta #3 en: 18 Mayo 2018, 19:22 pm »

Seguramente usar el depurador y situar breakpoints cerca de dónde posiblemente esté el fallo. Pero yo no uso. En mi caso hago que la aplicación escriba en stderr, que no pasa por ningún buffer y escribe directamente en la pantalla. Voy situándolos cerca de dónde creo que podría estar el fallo. Y si con eso no lo resuelvo empiezo desde el main para ir recorriendo las llamadas a funciones y llegar hasta el fallo. ¡

La verdad, me da pereza aprender a usar el depurador, ya lo hago yo con stderr, jajaja.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
arreglo de punteros y funciones
Programación C/C++
m@o_614 9 2,693 Último mensaje 30 Agosto 2013, 17:38 pm
por rir3760
función con arreglo de punteros. C++
Programación C/C++
yookino 2 1,220 Último mensaje 4 Febrero 2014, 23:14 pm
por Yoel Alejandro
función con arreglo de punteros. C++ « 1 2 »
Programación C/C++
yookino 10 4,551 Último mensaje 6 Febrero 2014, 16:59 pm
por yookino
Pasar a función un arreglo con punteros o con el nombre del arreglo como puntero
Programación C/C++
NOB2014 3 1,808 Último mensaje 9 Junio 2016, 17:10 pm
por geeke
Arreglo de apuntadores vs. arreglo común en lenguaje C.
Programación C/C++
NOB2014 1 1,785 Último mensaje 1 Octubre 2016, 23:29 pm
por dato000
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines