• Viernes 3 de Mayo de 2024, 04:54

Autor Tema:  Re: Fallo al intentar pasar como parametro un array multidim  (Leído 1679 veces)

Ozonek

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Fallo al intentar pasar como parametro un array multidim
« en: Domingo 15 de Diciembre de 2002, 02:47 »
0
Hola a todos. Resulta que a modo de boceto tengo un programa que le pasa a
una funcion un array multidimensional. Un esquema seria el siguiente:

void dibujar_ahorcado(char buffer[][6]); // Prototipo de la funcion que lo recibe

........
........

// Dentro de una funcion llamada control (que recibe un array como parametro), declaro el array que quiero pasar
y luego llamo a la funcion tres veces:

char buffer[4][6];

.....

dibujar_ahorcado(buffer); //Esto lo hago 3 veces a lo largo de la funcion



//Por ultimo la definicion de la funcion:

void dibujar_ahorcado(char buffer[][6]){

...... // Codigo para que dibuje y demas.

}

Pues bueno resulta que el compilador no detecta errores (DEVC++) pero me
sale la ventanita del compilador y el linker diciendome:


C:DOCUME~1OzonekCONFIG~1TempccO2caaa.o: In function `control(char *)':
//c/docume~1/ozonek/escrit~1/native~1/ahorca~3.cpp:191: undefined reference
to `dibujar_ahorcado(char (*)[5])'
//c/docume~1/ozonek/escrit~1/native~1/ahorca~3.cpp:199: undefined reference
to `dibujar_ahorcado(char (*)[5])'


Y es que me estoy volviendo loco por que si no llamo a esa funcion el
prograam funciona perfectamente, y cuando la llamo me sale eso (son las
lineas de las llamadas). No tengo ni idea de que quiere decir eso. Hay algo
no definido?? Alguien puede ayudarme??

Arleko

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
    • http://www.mundoarleko.vze.com
Re: Fallo al intentar pasar como parametro un array multidim
« Respuesta #1 en: Martes 17 de Diciembre de 2002, 23:24 »
0
Disculpa, necesito mas especificacion del programa, y tal ves te pueda ayudar,por que no lo mandas, o bien cambia a Turbo C++, es mas sencillo

bench

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Fallo al intentar pasar como parametro un array multidimensi
« Respuesta #2 en: Miércoles 1 de Enero de 2003, 19:48 »
0
Saludos Ozonek:

Tengo la Impresion de que el prototipo de la funcion es incorrecto ya que buffer es un arreglo de punteros y el prototipo debe ser:

void dibujar_ahorcado(char *buffer[]);
ó
void dibujar_ahorcado(char **buffer);

Las dos declaraciones indican lo mismo que: buffer es un puntero a un arreglo de punteros.

de tal forma que:

si el programa es :

...

char buffer[4][6];
/***
Se Cargan Los 4 Elementos de la
matriz con maximo 5 caracteres c/u
***************************/
strcpy(buffer[0], "Ele_1");
strcpy(buffer[1], "Ele_2");
strcpy(buffer[2], "Ele_3");
strcpy(buffer[3], "Ele_1");
...
/***
Pasar buffer como parametro
**********************/
dibujar_ahorcado(buffer);
...
/***
Sigue la Funcion Principal...
*********************/

/**************************
Cuerpo de dibujar_ahorcado(char **B_uffer);
Parametro: Puntero al Arreglo de
Punteros. debes controlar que la
funcion no exeda los limites definidos
cuando declaraste buffer. es decir
B_uffer va a apuntar a una matrix
de 4 Elementos que apuntan a un
arreglo de 6 elementos cada uno.
**************************/
void dibujar_ahorcado(char **B_uffer)
 {
  /***
  Si Por Ejemplo quiero imprimir el
  caracter almacenado en el primer
  elemento del Primer Arreglo:
  **** *********************/
  putchar(B_uffer[0][0]); // Imprimira E
  putchar(B_uffer[0][1]); // Imprimira l
  putchar(B_uffer[0][2]); // Imprimira e
  putchar(B_uffer[0][3]); // Imprimira _
  putchar(B_uffer[0][4]); // Imprimira 1
  /***
  B_uffer[0][5]) // contendra /0 = 0
  **************************/
 /***
  y de esta manera podras accesar cada uno de los elementos de la matriz. Debes tomar en cuenta que el primer elemento de la matriz es el B_uffer[0][0] y el Ultimo
es el B_uffer[3][5] Por que esto no lo controla el C.
Si Utilizas Por ejemplo el elemento B_uffer[100][10] el programa compilara bien, pero dara un error en tiempo de ejecución que dependera del compilador y del sistema operativo que este Usando por que habra una violacion del area de memoria que destinaste al declarar el arreglo.

Esperando te sirva la información

Saludos:

Bench.

http://www.BenchSQL.com/
 Prototipo de la funcion que lo recibe

........
........

// Dentro de una funcion llamada control (que recibe un array como parametro), declaro el array que quiero pasar
y luego llamo a la funcion tres veces:

char buffer[4][6];