• Martes 12 de Noviembre de 2024, 20:36

Autor Tema:  Reservar Memoria Para Array De Estructuras  (Leído 4394 veces)

Black_Spidey

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Reservar Memoria Para Array De Estructuras
« en: Lunes 27 de Febrero de 2006, 00:07 »
0
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

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Reservar Memoria Para Array De Estructuras
« Respuesta #1 en: Lunes 27 de Febrero de 2006, 13:41 »
0
revisa las intrucciones
malloc
calloc
realloc
de lenguaje C, o la instruccion
new

de
C++

entre otras.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Black_Spidey

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Reservar Memoria Para Array De Estructuras
« Respuesta #2 en: Lunes 27 de Febrero de 2006, 23:51 »
0
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?

Black_Spidey

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Reservar Memoria Para Array De Estructuras
« Respuesta #3 en: Martes 28 de Febrero de 2006, 00:29 »
0
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

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Reservar Memoria Para Array De Estructuras
« Respuesta #4 en: Martes 28 de Febrero de 2006, 06:46 »
0
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.  
La imaginación es el límite.
Hardware & Software | Mexchip

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Reservar Memoria Para Array De Estructuras
« Respuesta #5 en: Martes 28 de Febrero de 2006, 14:03 »
0
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.  
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Elden

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Reservar Memoria Para Array De Estructuras
« Respuesta #6 en: Sábado 11 de Marzo de 2006, 15:06 »
0
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

Elden

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Reservar Memoria Para Array De Estructuras
« Respuesta #7 en: Domingo 12 de Marzo de 2006, 01:14 »
0
Mil perdones, lo que contestado no tiene nada que ver.

No sé de donde mi cabeza se ha sacado esas cosas de matrices irregulares.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Reservar Memoria Para Array De Estructuras
« Respuesta #8 en: Domingo 12 de Marzo de 2006, 01:50 »
0
:P.

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

Saludos,
José Jorge (Geo)  :hola:.
La imaginación es el límite.
Hardware & Software | Mexchip