IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

probl�me avec des variables static d�clar�es globales!


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Mars 2007
    Messages
    159
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Par d�faut probl�me avec des variables static d�clar�es globales!
    Chalut,

    J'ai deux fichiers fichier1 et fichier2.

    Dans fichier2, je fais les d�clarations suivantes:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    static char * var1 = (char*)malloc(....);
    static char * var2 = (char*)malloc(....);
      ....
      ....
    void fct()
    {
        ....
        ....
        a = var1;
        b = var2;
    }
        ....
    Dans fichier1

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int main()
    {
       .....
       .....
       var1 = "test1";
       var2 = "test2";
       .....
       //appel à fct qui est déclarée dans fichier2
       fct(param);
       .....
       .....
    }

    Mais a et b ne prennent pas les valeurs attendues.
    Je lance mon prog en mode pas � pas:
    Dans le fichier1 juste apr�s les affectations de var1 et var2, ces derni�res ont les bonnes valeurs.
    Mais apr�s l'appel de fct qui est d�finie dans le fichier2 l� o� les vaiables ont �t� declar�es, var1 et var2 n'ont plus ces bonnes valeurs

    quelqu'un a une explication pour �a??

    Merci d'avance!

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    124
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 124
    Par d�faut
    quelles sont les valeurs de var a la fin?

  3. #3
    Expert �minent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retrait�
    Inscrit en
    D�cembre 2003
    Messages
    14 512
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Retrait�

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 14 512
    Par d�faut
    Citation Envoy� par vonemya Voir le message
    Dans fichier2, je fais les d�clarations suivantes:
    [code]
    static char * var1 = (char*)malloc(....);
    static char * var2 = (char*)malloc(....);
    ....
    Pas du C. On a pas le droit d'appeler une fonction pour initialiser une variable persistante.

  4. #4
    Membre confirm� Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Par d�faut
    D�j�, y'a un truc qui va pas du tout, si on malloc une chaine, pour y mettre des caract�res, c'est

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    str[0] = 'a';
    str[1] = 'b';
    str[n] = 0;
    ou encore les fonctions qui vont bien : strcpy par exemple.
    Parceque sinon, tu as allou� de la m�moire pour rien. Et ca doit �tre la que ca plante.
    Quoi que ton a = var1 sera pas forc�ment plus valide.
    (Me souviens plus de tout ce qui est globale, je m'en sert rarement perso, et quasi jamais pour des chaines)

    Je conseillerais quand � moi de ne pas utiliser de globales dans ce cas, et l'usage de la fonction strdup qui alloue elle m�me... En d�clarant les chaines dans le main et en les passant en parametre.
    Mais sans le tout le code, je sais pas si tu peux le faire ou pas...

  5. #5
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Mars 2007
    Messages
    159
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 159
    Par d�faut
    Citation Envoy� par Emmanuel Delahaye Voir le message
    Pas du C. On a pas le droit d'appeler une fonction pour initialiser une variable persistante.
    Effectivement, c'est du C++. D'ailleurs je viens de me rendre compte que j'ai poster dans le forum du C

    Est ce que c'est pareil pour le C++: on a pas le droit d'appeller une fonction pour initialiser une variable persistante?

    Dans mon cas l'appel � fct n'a pas pour but d'initialiser ces deux variables globales, � un moment donn� du programme on modifie leurs valeurs.

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    Citation Envoy� par vonemya Voir le message
    Effectivement, c'est du C++. D'ailleurs je viens de me rendre compte que j'ai poster dans le forum du C

    Est ce que c'est pareil pour le C++: on a pas le droit d'appeller une fonction pour initialiser une variable persistante?

    Dans mon cas l'appel � fct n'a pas pour but d'initialiser ces deux variables globales, � un moment donn� du programme on modifie leurs valeurs.
    En m�me temps, les malloc, c'est pas vraiment du C++ ....


  7. #7
    Membre �m�rite Avatar de valefor
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    711
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 711
    Par d�faut
    Hors mis les probl�mes d'allocation, pour le probl�me de la visibilit� des variables, je te recommande :
    Fichier 1 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char * var1 = 0;
    char * var2 = 0;
    void fct()
    {
        a = var1;
        b = var2;
    }
    Fichier 2 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    extern char * var1;
    extern char * var2;
    int main()
    {
       var1 = "test1";
       var2 = "test2";
       fct(param);
    }
    Enfin point de vue conception c'est pas net ce que tu fait. Est-ce que tes variables devraient �tre externe pour le fichier 1, pour le fichier 2 (donc qui initialise les variables) ? Pourquoi ne pas passer tes var1 et var2 en param�tre de fct ?

Discussions similaires

  1. Probl�me avec une variable static
    Par Kevin12 dans le forum G�n�ral Java
    R�ponses: 2
    Dernier message: 05/05/2008, 17h20
  2. R�ponses: 5
    Dernier message: 11/10/2007, 17h01
  3. R�ponses: 15
    Dernier message: 31/01/2007, 22h03
  4. R�ponses: 28
    Dernier message: 18/08/2006, 21h05
  5. [Debutant] Probl�me avec des membres static
    Par Mathieu.J dans le forum D�buter
    R�ponses: 4
    Dernier message: 24/08/2005, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo