Probleme avec structure

Résolu
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 - 28 mars 2007 à 14:09
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 - 29 mars 2007 à 17:21
Bonjour a tous,

voila j'ai un probleme avec un bout de code qui compile correctement mais a l'execution tombe en exception!
'System.NullReferenceException'
voici le code:

struct smsgL2DisChargingSide * GetInfo534 (int No_file,int calc_fborder)
{
    int n_fur, n_fil, n_pdt,i_fur,NB_DIS_SLAB,i_fil,i_pdt;
    bool err_i_pdt=false;
    struct smsgL2DisChargingSide *pDisChgSide;

    pDisChgSide->msgL2DisChgSide.nextIndex = No_file;       // BUG ?!? exception->'System.NullReferenceException'
......
......
......
}
et voici mes structures:
typedef struct smsgL2DisChgSide
{
    BYTE    Spare;                       
    BYTE    nextIndex;                  
    struct    smsgPLCSlabData  SlabPosInp[NB_L2_DISCHG_SLAB];
} stmsgL2DisChgSide;

typedef struct smsgL2DisChargingSide
{
    BYTE    version;                  
    BYTE    msgType;                  
    struct    smsgL2DisChgSide  msgL2DisChgSide;
} stmsgL2DisChargingSide;
 je ne comprend pas pourquoi ca plante comme ca;

je ne fais que renseigner un champ de ma structure....

si quelqu'un pouvait m'aider ca serait généreux!!!
merci d'avance!

5 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
28 mars 2007 à 15:12
Oui mais ta structure n'est pas initialisée quant tu accedes aux champs !
C'est simplement un pointeur vers une struct que tu as créé.

Il faudrait faire :
smsgL2DisChargingSide *pDisChgSide = new smsgL2DisChargingSide;

De plus tu fait un typedef et tu utilise le tag de la struct à la place de celui-ci, c'est incohérent. 

Enfin je te conseille des identificateurs plus simple, parceque là, c'est vraiment tarabiscoté...
ex :
struct smsgPLCSlabData SlabPosInp[NB_L2_DISCHG_SLAB];
OUF !!!
3
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
28 mars 2007 à 17:18
struct smsgL2DisChargingSide *pDisChgSide;

    pDisChgSide->msgL2DisChgSide.nextIndex = No_file;

Ton pointeur pDisChgSide n'est pas initialisé, il ne point sur aucun espace mémoire contenant les champs de ta structure. Initialise le avec un new.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
29 mars 2007 à 16:31
super ,
merci de votre aide ca marche niquel j'avoue que j'ai oublier de faire l'init

par contre quand tu dis ca :
De plus tu fait un typedef et tu utilise le tag de la struct à la place de celui-ci, c'est incohérent.

je vois pas trop bien !!!

bref merci encore ;-)
 
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
29 mars 2007 à 17:00
Et bien on peut créer une struct de cette façon :

// C++
struct MaStruct // ceci est le tag
{
   // membres
};

MaStruct s; 

// C
typedef struct MaStructTag
{
   // Membres
}MaStruct; // Le type

MaStruct s;

ET TOI TU FAIS :
MaStructTag s;

Ce qui est inutile et de plus porte à confusion.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
29 mars 2007 à 17:21
oki j'ai bien saisi la difference
jte remercie encore pr tes conseils ....

 
0
Rejoignez-nous