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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [SOLUCIONADO ]Structs Dinamicas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO ]Structs Dinamicas  (Leído 2,324 veces)
Xenomorfo77

Desconectado Desconectado

Mensajes: 61


Ver Perfil
[SOLUCIONADO ]Structs Dinamicas
« en: 6 Mayo 2014, 20:14 pm »

Código
  1. #include <stdio.h>
  2.  
  3. typedef struct Vagon{
  4.    int numero;
  5.    int peso;
  6.    char *carga;
  7. }vagon;
  8.  
  9. typedef struct Tren{
  10. vagon *v;
  11. }tren;
  12.  
  13.  
  14. int main(){
  15.  
  16.    int nvagones=10;
  17.  
  18.    tren *p=(tren *)malloc(sizeof(tren));
  19.  
  20.    p->v =(vagon *)malloc(nvagones*sizeof(vagon));    
  21.  
  22.    return 0;
  23. }
  24.  

Estoy aprendiendo punteros y este ejemplo trata de hacer trenes con muchos vagones. En el ejemplo con 1 solo tren luego reservo memoria para 10 vagones. Lo que pasa es que no se acceder luego a cada vagon porque p->v[2]->numero=1; por ejemplo no funciona y no entiendo porque. ¿Alguien me explica?

Dejo el code de ejemplo por si a alguien le sirve de algo:

Código
  1. #include <stdio.h>
  2.  
  3. typedef struct Vagon{
  4.    int numero;
  5.    int peso;
  6.    char *carga;
  7. }vagon;
  8.  
  9. typedef struct Tren{
  10. vagon *v;
  11. }tren;
  12.  
  13. char cargas[4][25]={"MADERA","PAN","HIERRO","ALIMENTOS"};
  14.  
  15. int main(){
  16.    srand(time(NULL));
  17.  
  18.    int nvagones=10;
  19.    int i;
  20.  
  21.    tren *p=(tren *)malloc(sizeof(tren));
  22.  
  23.    p->v =(vagon *)malloc(nvagones*sizeof(vagon));
  24.  
  25.    for(i=0;i<nvagones;i++){
  26.        p->v[i].numero=i+1;
  27.        p->v[i].peso = 500+(rand()%1500);
  28.        p->v[i].carga =cargas[rand()%4];
  29.    }
  30.  
  31.    for(i=0;i<nvagones;i++){
  32.        printf("Numero: %d\n",p->v[i].numero);
  33.        printf("\tPeso: %dKg",p->v[i].peso);
  34.        printf("\tCarga: %s\n",p->v[i].carga);
  35.    }
  36.  
  37.  
  38.    return 0;
  39. }
  40.  


« Última modificación: 6 Mayo 2014, 21:32 pm por Xenomorfo77 » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Structs Dinamicas
« Respuesta #1 en: 6 Mayo 2014, 21:19 pm »

p->v[2].numero=1;

Ya estas desreferenciando el puntero al acceder al tercer elemento del array.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Xenomorfo77

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Re: Structs Dinamicas
« Respuesta #2 en: 6 Mayo 2014, 21:25 pm »

p->v[2].numero=1;

Ya estas desreferenciando el puntero al acceder al tercer elemento del array.

Ya me he dado cuenta estaba intentando hacer p->v[]-> cuando es p->v[].

¿Correcto?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Structs Dinamicas
« Respuesta #3 en: 6 Mayo 2014, 21:31 pm »

Si, es correcto.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: [SOLUCIONADO ]Structs Dinamicas
« Respuesta #4 en: 6 Mayo 2014, 21:54 pm »

Solo agregar una cosa mas, no debes olvidar de liberar la memoria despues
de utilizarla

Código
  1. free(p);
  2. free(p->v);

Saludos
En línea

Xenomorfo77

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Re: [SOLUCIONADO ]Structs Dinamicas
« Respuesta #5 en: 7 Mayo 2014, 01:00 am »

Solo agregar una cosa mas, no debes olvidar de liberar la memoria despues
de utilizarla

Código
  1. free(p);
  2. free(p->v);

Saludos

Muy cierto gracias. Y una cosa ¿El órden de liberar es ese? O sería free(p->v) y despues free(p);
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: [SOLUCIONADO ]Structs Dinamicas
« Respuesta #6 en: 7 Mayo 2014, 01:18 am »

El que vos decis Xenomorfo77, una vez que liberas p no podes trabajar mas con el, es memoria invalida y desreferenciar ese puntero un error logico.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Structs Y Clases
.NET (C#, VB.NET, ASP)
anion 1 2,294 Último mensaje 14 Julio 2007, 04:26 am
por MANULOMM
[?]Addys Dinamicas y Offset (Solucionado) « 1 2 »
ASM
Иōҳ 11 7,687 Último mensaje 24 Marzo 2010, 15:44 pm
por Иōҳ
[SOLUCIONADO] Una ayuda sobre las variables dinámicas
.NET (C#, VB.NET, ASP)
Eleкtro 0 1,684 Último mensaje 6 Enero 2013, 00:46 am
por Eleкtro
(SOLUCIONADO) Ayuda con los structs « 1 2 »
Programación C/C++
BlackM4ster 13 5,561 Último mensaje 23 Marzo 2013, 14:29 pm
por BlackM4ster
[Solucionado] filas dinamicas con inputs y solo numeros
Desarrollo Web
landerzx 9 5,256 Último mensaje 10 Diciembre 2014, 10:10 am
por exploiterstack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines