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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / Programación C/C++ / Re: acceder a estructura puntero dentro de estructura en: 14 Octubre 2018, 11:55 am
Esto es trabajo con punteros. Da igual si es en estructura o fuera de ella. Para usar un dato antes debe existir.
muchas gracias la verdad es que me sirvió de mucho tu ayuda
12  Programación / Programación C/C++ / Re: acceder a estructura puntero dentro de estructura en: 14 Octubre 2018, 00:52 am
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct tipo_interior {
  5.    int *pint;
  6. } interior;
  7.  
  8. typedef struct {
  9.    interior *pinterior;
  10. } exterior;
  11.  
  12. int main() {
  13.    int entero = 1;
  14.  
  15.    exterior e;
  16.    e.pinterior = malloc(sizeof(interior));
  17.    e.pinterior->pint = &entero;
  18.  
  19.    printf("%d", *e.pinterior->pint);
  20.  
  21.    free(e.pinterior);
  22. }

e existe en la pila, por lo tanto es un dato que C trata automáticamente.
e.pinterior sólo es un puntero, para poder usar la estructura hay que dimensionarla en algún sitio. Cómo no se hace en la pila hay que llamar a malloc para que la dimensione en el montón. Al hacerlo de esa forma es responsabilidad del programador liberarla. Eso es lo que hace free(e.pinterior).
entero existe en la pila y cómo pasa con e C lo trata de forma automática.
e.pinterior->pint apunta a entero, por tanto y cómo ya existe (tiene dimensión) no hay que hacer nada. En estos casos lo que se debe procurar es que un puntero apunte a una de estas variables que C va a liberar automáticamente, que esta desaparezca pero siga existiendo el puntero, que ahora apuntaría a una zona de memoria sin dimensionar.
Muchas gracias , pero tengo una pequeña duda, ¿esto siempre ocurre cuando tienes una estructura tipo puntero dentro de una misma?
13  Programación / Programación C/C++ / Re: acceder a estructura puntero dentro de estructura en: 13 Octubre 2018, 21:59 pm

Son punteros y los punteros sólo apuntan a sitios, no guardan datos. Así que g.hexagons al ser un simple puntero no contiene nada dentro.
Debes dimensionar un hexagon en la memoria del montón con malloc, de esta forma sí podrás acceder a vertice y éste sí apuntará a un dato, en tu caso a i1. Cómo lo has dimensionado a mano debes liberarlo a mano con free.

En el printf vas a acceder a a un dato apuntado por un puntero por lo que debes dereferenciarlo con *, en caso contrario verás la dirección de memoria del puntero, no el dato dónde apunta.
¿Puedes poner algun ejemplo? es mejor usar malloc aqui?
14  Programación / Programación C/C++ / acceder a estructura puntero dentro de estructura en: 13 Octubre 2018, 16:31 pm
No entiendo por que al compilar mi programa crashea y eso que he intentado de todo pero no he conseguido solucionarlo.

Código:
#include <stdio.h>

typedef struct _hexagon {
    int *vertice;
    int *path;
    int resourceType;
} hexagon;


typedef struct _game {
    hexagon *hexagons;
} Game;

int main()
{
    int i1 = 1;
    int i2 = 2;
    int i3 = 3;
    int i4 = 4;
    int i5 = 5;
    int i6 = 6;

    Game g;
    g.hexagons->vertice = &i1;


    printf("%d \n", g.hexagons->vertice);


    return 0;
}
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines