[C++] Variable static , ou l'initialiser??

Fermé
tchou93270 Messages postés 13 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 27 mai 2010 - 26 mai 2010 à 17:39
tchou93270 Messages postés 13 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 27 mai 2010 - 27 mai 2010 à 10:13
Bonjour,

Pour résumer un peu, je suis en train de créer un parseur qui permet d'instrumentaliser mes codes C++ afin de permettre de repérer les différents appel de fonction de mon programme principal.
Pour cela , une classe comportant une variable static de type map a été créer, et c'est cette même variable qui va etre mise à jour apres chaque fonction repérer.

Voila mon problème, j'ai plusieurs repertoire de libraries contenant plusieurs fichier, et un repertoire contenant mon programme principal.
Lorsque j'instrumentalise juste le repertoire de mon programme principal, je vois bien les fonctions apparaître en initialisant ma variable static au niveau du fichier de mon programme principal. Par contre, si j'instrumentalise tous les autres répertoires contenant les fichiers de librairies, ca me met un segmentation fault... Comme si la variable static n'avait pas été initialisé...

Avez vous une idée sur le probleme?


2 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
27 mai 2010 à 00:11
L'utilisation d'une variable statique déclarée dans une classe est un peu particulière.
Il faut bien comprendre que cette variable n'appartient pas à un objet instancié de cette classe; il vaut mieux voir cette variable comme faisant partie de la classe.
Il n'est donc nul besoin d'instancier un seul objet de cette classe pour l'utiliser mais il faudra impérativement déclarer cette variable en dehors de la classe; elle est alors iniatialisée et donc utilisable; un exemple:
classe exemple
{
  public:
    exemple()  { nbObjet++; }
    ~exemple() { nbObjet--; }
    static int nbObjet;
}

int exemple::nbObjet;

Comme pour toute variable statique, par défaut la valeur est 0.
Bonne continuation.
0
tchou93270 Messages postés 13 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 27 mai 2010
27 mai 2010 à 10:13
Salut , merci pour ta réponse, mais ce n'est pas ca qui me bloque. Le problème c'est que j'ai un code et je ne sais pas ou commece le programme principal, apparement le programme passe d'abord au niveau des librairies que j'ai instrumenté.. J'ai initialisé ma variable static au niveau de ce que je pensais être le programme principal (fichier contenant le main) , mais apparement ce n'est pas le cas. Il y a une erreur de segmentation je pense, parce qu'il ne connait pas cette variable static au niveau des librairies.

Comment puis-je faire pour etre sur que ma variable est initialisé au tout début de mon programme principal?
Esce que c'est normal que mon programme ne commence pas au niveau du main, mais passe par mes libraires?

Si vous voulez quelque chose de concret je peux vous fournir le code..
Merci
0