Probleme avec structure [Résolu]

Signaler
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
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

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
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 !!!
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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]
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
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 ;-)
 
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
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.
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
oki j'ai bien saisi la difference
jte remercie encore pr tes conseils ....