SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Black_Spidey en Lunes 27 de Febrero de 2006, 00:07

Título: Reservar Memoria Para Array De Estructuras
Publicado por: Black_Spidey en Lunes 27 de Febrero de 2006, 00:07
Hola a todos, mi consulta es para saber cómo puedo reservar memoria para un arreglo que contendra apuntadores a una estructura, y a partir de ese arreglo acceder a cada uno de los registros y a la vez a sus elementos.
Es para realizar un método de ordenamiento.

Muchas gracias
Título: Re: Reservar Memoria Para Array De Estructuras
Publicado por: JuanK en Lunes 27 de Febrero de 2006, 13:41
revisa las intrucciones
malloc
calloc
realloc
de lenguaje C, o la instruccion
new

de
C++

entre otras.
Título: Re: Reservar Memoria Para Array De Estructuras
Publicado por: Black_Spidey en Lunes 27 de Febrero de 2006, 23:51
si, gracias verás, sé reservar memoria con malloc, new y new[] casi para cualquier tipo de dato, excepto el definido por el usuario (en este caso una estructura y específicamente una "Matriz de Nodos Variable").

pues suponiendo que:

struct Nodo
{
 int Valor;
 char Nombre[20];
 Nodo *Sig, *Ant;
};

....

Nodo *Array = new *Nodo[Num]; //Donde Num serian la cantidad de nodos variables

//o bien

Nodo *Array=(Nodo*) malloc(sizeof(Nodo)*Num);

Ninguna de las inicializaciones son aceptadas ni por Turbo C ni por Borland C.

¿Estoy haciendolo mal?
Título: Re: Reservar Memoria Para Array De Estructuras
Publicado por: Black_Spidey en Martes 28 de Febrero de 2006, 00:29
Pues lo pude resolver  :D sip con la ayuda de un buen amigo n_n.

Dejo la solucion para aquel al que le sea útil.

PARA C:

//si Nodo es una estructura

Nodo **Array=(Nodo**) malloc(Num*sizeof(Nodo*)); //Donde Num es la cantidad de
                                                                              //nodos

Saludos n_n
Título: Re: Reservar Memoria Para Array De Estructuras
Publicado por: Geo en Martes 28 de Febrero de 2006, 06:46
Cita de: "Black_Spidey"
Nodo *Array = new *Nodo[Num]; //Donde Num serian la cantidad de nodos variables
Esta debería ser así:

Código: Text
  1.  
  2.   Nodo* array = new Nodo[ num ];  // no usas el * para el operador new aquí.
  3.  
  4.  
Título: Re: Reservar Memoria Para Array De Estructuras
Publicado por: JuanK en Martes 28 de Febrero de 2006, 14:03
Exacto, y si mal no recuerdo en lenguaje C puedes hacer esto:

Código: Text
  1. struct Nodo *Array=(struct Nodo*) malloc(sizeof(struct Nodo)*Num);
  2.  
Título: Re: Reservar Memoria Para Array De Estructuras
Publicado por: Elden en Sábado 11 de Marzo de 2006, 15:06
Según he leido lo que quiere conseguir es una matriz irregular de nodos.
Si no es así , pido perdón.


Para crear una matriz irregular de nodos deberías usar lo siguiente.

Suponemos una estructura nodo , además está con typedef

Código: Text
  1.  
  2. nodo **nodos; //la matriz se llamara nodos, nodos[a][b] fila a columna b
  3.  
  4. //definimos el número de columnas o filas, según tu representación mental
  5. //NUMA es el número que quieres
  6. nodos = (nodo**)malloc(sizeof(nodo*)*NUMA);
  7.  
  8.  
  9. //ahora creamos realmente los nodos
  10. for(int i=0;i<NUMA;i++)
  11.     nodos[i]=(nodo*)malloc(sizeof(nodo)*NUMB);
  12.  
  13.  
  14. //NUMB no tiene por que ser constante , podríamos haber puesto i por ejemplo para crear una matriz en forma triangular
  15.  
  16.  

La idea es esta:

Nodos
|------>Nodo1,nodo2,nodo3
|------>nodo4,nodo5
|------>nodo6
|------>Null

Nodos es un array de punteros a nodo, en este caso de 4 punteros,

además si te fijas es una matriz irregular puesto que no todas las filas tienen el mismo número de elementos.

Suerte.
PD: Luego tendrás que liberar TODO lo que has cogido
Título: Re: Reservar Memoria Para Array De Estructuras
Publicado por: Elden en Domingo 12 de Marzo de 2006, 01:14
Mil perdones, lo que contestado no tiene nada que ver.

No sé de donde mi cabeza se ha sacado esas cosas de matrices irregulares.
Título: Re: Reservar Memoria Para Array De Estructuras
Publicado por: Geo en Domingo 12 de Marzo de 2006, 01:50
:P.

Igual, la información es útil :).

Saludos,
José Jorge (Geo)  :hola:.