• Viernes 15 de Noviembre de 2024, 05:41

Autor Tema:  Memoria Dinamica  (Leído 1196 veces)

Atreyu

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Memoria Dinamica
« en: Martes 30 de Agosto de 2005, 14:38 »
0
Hola:
Estaba intentando crear una tabla de dos dimensiones con memoria dinamica. Lo que no se es si puedo crearla en otra funcion que no sea main y que esta, después de meter el parámetro cuando la llamo desde main tambien se pueda usar sin problemas en void main()
Ademas me da una serie de problemas:


short crear_tablero (Jugadorrommel *tabla)
{
   int i;

   tabla->tablero = (char **) malloc (tabla->filas * sizeof (char *));

   if (tabla->tablero == NULL)
      return ERROR_MEMORIA;

   for (i=0; i< tabla->filas; i++)
      tabla->tablero = (char *) malloc (tabla ->columnas * sizeof (char));

}





typedef struct
{
   Jugadorsec   jugada;
   int                filas, columnas;
   char             *tablero;   
} Jugadorrommel;


Parece ser que la funcion siempre devuelve error y nunca crea la memoria con los siguientes warnings:

warning C4047: '=' : 'char *' differs in levels of indirection from 'char ** '
warning C4047: '=' : 'char ' differs in levels of indirection from 'char *'
warning C4715: 'crear_tablero' : not all control paths return a value

Agradeceria cualquier ayuda en esto

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Memoria Dinamica
« Respuesta #1 en: Martes 30 de Agosto de 2005, 16:25 »
0
Hola

El problema lo tienes cuando haces:

Código: Text
  1.  
  2.  tabla-&#62;tablero = (char **) malloc (tabla-&#62;filas * sizeof (char *));
  3.  
  4.  

Estas reservando memoria para un char** pero en un char*

Aca te dejo un pequeo ejemplo basado mas o menos en el tuyo, que creo deberia funcionar

Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4.  
  5.  
  6. typedef struct
  7. {
  8. int filas,columnas;
  9. char **mat;
  10. }datos;
  11.  
  12. char **crear_tabla (datos dat)
  13. {
  14. int i;
  15. char **matriz;
  16. matriz = (char **) calloc(dat.filas,sizeof(char *));
  17. for( i=0; i&#60;dat.filas; i++ )
  18.   matriz[i] = (char *) calloc( dat.columnas, sizeof(char));
  19.   for(int i=0;i&#60;dat.filas;i++)
  20. {
  21. for(int j=0;j&#60;dat.columnas;j++)
  22. {
  23. matriz[i][j]='a';
  24. }
  25. }
  26. return matriz;
  27.  
  28. }
  29.  
  30. int main(int argc, char *argv[])
  31. {
  32. char **recoge;
  33. datos dato;
  34. dato.filas=3;
  35. dato.columnas=4;
  36. dato.mat=crear_tabla(dato);
  37. dato.mat[1]=&#34;hola&#34;;
  38.  
  39. for(int i=0;i&#60;dato.filas;i++)
  40. {
  41. printf(&#34;&#092;n&#34;);
  42. for(int j=0;j&#60;dato.columnas;j++)
  43. {
  44. printf(&#34;%c&#34;,dato.mat[i][j]);
  45.  
  46. }
  47. }
  48.  
  49. getchar();
  50. return 0;
  51. }
  52.  
  53.  

Como puedes ver la funcion es char** por lo que devuelve los datos a donde apunta, y asi puedes recogerlos en el char** de la estructura en el main

Esta linea era simplemente para ver si podia modificar una fila de la matriz bidimensional

Código: Text
  1. dato.mat[1]=&#34;hola&#34;;
  2.  

Espero que te sirva

salu2  :hola:

Atreyu

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Memoria Dinamica
« Respuesta #2 en: Martes 30 de Agosto de 2005, 21:05 »
0
Si. Muchas gracias :D. Nunca me termine de aclarar con los punteros. Pense que al declarar un puntuero de una estructura que contenia un puntero bastaba. Gracias de nuevo