Problema con acceder a una estructura

Iniciado por Wd10, 19 Enero 2013, 23:46 PM

0 Miembros y 1 Visitante están viendo este tema.

Wd10

Hola a todo el EH, me gustaría saber si podrian ayudarme, mi problema es este:
tengo una estructura:

typedef struct _RE_MORE {
    BYTE      r1;
    BYTE      r2;
    BYTE      r3;
    BYTE      r4;
    WORD      r5;
    WORD      r6;
    DWORD     RX1;
    DWORD     RX2;
} RE_MORE, *LPRE_MORE;


typedef struct _Game02 {
    WORD           re1;
    WORD           re2;
    WORD           re3;
    RE_MORE      remore[1];
} Game02 , *PGame02 ;


ahora declaro tengo un puntero de tipo Game02
y quiero acceder al miembro r1:


PGame02  puntero

Variable = puntero->remore[0].r1;


pero en variable no me almacena el valor que esta en r1.

por favor podrian decirme como puedo resolver este problema y cual es la mejor forma de hacerlo? Gracias

avesudra

¿Has puesto a apuntar el puntero hacia la estructura? te dejo un code que funciona:
#include <stdio.h>
#include <windows.h>

typedef struct _RE_MORE {
     BYTE      r1;
     BYTE      r2;
     BYTE      r3;
     BYTE      r4;
     WORD      r5;
     WORD      r6;
     DWORD     RX1;
     DWORD     RX2;
}RE_MORE,*LPRE_MORE;


typedef struct _Game02 {
     WORD           re1;
     WORD           re2;
     WORD           re3;
     RE_MORE      remore[1];
} Game02 , *PGame02 ;

int main(int argc, char *argv[])
{
    Game02 game;
    PGame02 gameP = &game;
    int variable = gameP->remore[0].r1;
    printf("Variable %d",variable);
    return 0;
}
Regístrate en

Wd10

Hola gracias por responder, pero a mi no me funciona  :huh:
veras hice este codigo:

#include <stdio.h>
#include <windows.h>

typedef struct _RE_MORE {
     BYTE      r1; // 7
     BYTE      r2; // 8
     BYTE      r3; // 9
     BYTE      r4; // 10
     WORD      r5; // 11,12
     WORD      r6;
     DWORD     RX1;
     DWORD     RX2;
}RE_MORE,*LPRE_MORE;


typedef struct _Game02 {
     WORD           re1; // 1,2
     WORD           re2; // 3,4
     WORD           re3; // 5,6
     RE_MORE      remore[1];
} Game02 , *PGame02 ;

BYTE pruebaarray[50] = {1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};



int main(int argc, char *argv[])
{
    PGame02 gameP = (PGame02)pruebaarray;

    int variable = gameP->remore[0].r1;
    printf("Variable %d",variable);
    return 0;
}

hice ese array para ver si de verdad obtenia el valor correcto y no me funciono


x64core

El problema es el alineamiento de la estructura, todo depende del compilador que utilices, y de los parametros que son pasados al compilador, generalmente los miembros de una estructura se alinean al tamaño de un DWORD, debido a que la accesos a posiciones de memoria por la CPU son más rapido si estan alineados , por eso mismo debes verificarlo, que compilador estas usando?

en VC++ se podes hechar una miraba a /zp
o usar

#pragma pack(push)
#pragma pack(alineamiento)

// Tu estructura

#pragma pack(pop)

Wd10

#4
Gracias a todos eso era!  ;-)



Aunque aun no entiendo bien