------------| MS VC++ Code |--------------------
typedef union
{
int i;
char c;
short t;
} MY_UNION;
namespace SOME_SPACE { static MY_UNION uni; };
#define MY_TYPE(s,m) SetType(((s *)&SOME_SPACE::uni)->m)
int SetType(int nValue)
{
return 5;
}
typedef struct
{
int count1;
char Buffer1[257];
char Buffer2[257];
char Buffer3[257];
char Buffer4[257];
char Buffer5[257];
char Buffer6[257];
char Buffer7[257];
char Buffer8[257];
char Buffer9[257];
char Buffer10[257];
char Buffer11[257];
char Buffer12[257];
char Buffer13[257];
char Buffer14[257];
char Buffer15[257];
char Buffer16[257];
char Buffer17[257];
char Buffer18[257];
char Buffer19[257];
char Buffer20[257];
char Buffer21[257];
char Buffer22[257];
char Buffer23[257];
char Buffer24[257];
char Buffer25[257];
char Buffer26[257];
char Buffer27[257];
char Buffer28[257];
char Buffer29[257];
char Buffer30[257];
char Buffer31[257];
char Buffer32[257];
char Buffer33[257];
char Buffer34[257];
char Buffer35[257];
char Buffer36[257];
char Buffer37[257];
char Buffer38[257];
char Buffer39[257];
char Buffer40[257];
char Buffer41[257];
char Buffer42[257];
char Buffer43[257];
char Buffer44[257];
char Buffer45[257];
char Buffer46[257];
char Buffer47[257];
char Buffer48[257];
char Buffer49[257];
char Buffer50[257];
char Buffer51[257];
char Buffer52[257];
char Buffer53[257];
char Buffer54[257];
char Buffer55[257];
char Buffer56[257];
char Buffer57[257];
char Buffer58[257];
char Buffer59[257];
char Buffer60[257];
char Buffer61[257];
char Buffer62[257];
char Buffer63[257];
char Buffer64[257];
char Buffer65[257];
char Buffer66[257];
char Buffer67[257];
char Buffer68[257];
char Buffer69[257];
char Buffer70[257];
char Buffer71[257];
int mode;
} BIG_STRUCT;
void main()
{
int res = MY_TYPE(BIG_STRUCT, mode);
}
---------------------End of Code----------------------
-----
Could you explain the following to me:
If BIG_STRUCT is as big as it is shown above, the program causes an exception (Access Violation).
If we have the BIG_STRUCT structure a few character strings shorter (Buffer strings 67-71 are commented out), the program works fine. Whats going on?
-andrey