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 :

variable qui se modifie quand on en modifie une autre


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Points : 16
    Points
    16
    Par défaut variable qui se modifie quand on en modifie une autre
    Bonjour,

    J'ai une variable qui change de valeur sans que je sache pourquoi.
    Voilà ma méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    void fonction_provisoire(const char* video_name, short unsigned int proj){
     
      const char* name;
     
       string name_prov = (video_name);
      if (name_prov.substr(name_prov.size()-4, 4) == ".avi")
        name = name_prov.substr(0, name_prov.size()-4).c_str();
      else
        name = name_prov.c_str();
     
       string p;
     
      switch(proj){
      case 1 :
     
        cout<<name<<endl;
        p = "xy";
         cout<<name<<endl;
        break;
      case 2 :
        p = "xt";
        break;
      case 3 :
        p = "yt";
        break;
      default:
        exit(1);
      }
     
      return;
    }
    Je l'appelle comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fonction_provisoire("seq.avi", 1);
    Et elle m'affiche :
    seq
    xy

    Je ne comprends pas pourquoi "name" est modifié au moment ou j'affecte "xy" à p. Si quelqu'un peut m'expliquer ça serait génial !
    Merci d'avance

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Chez moi, le même code donne bien :
    Le fichier avec lequel tu travaille a-t-il été bien compilé ? Il n'y a pas deux fichiers similaires en deux endroits différents ? ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Ah ouais ? Bizarre... j'ai bien tout recompilé, et vérifié, et je ne crois pas avoir de code similaire ailleurs !

    Ce qu'on vient de me suggérer comme explication c'est que j'ai pas alloué la mémoire pour mon const char* name, et que je l'initialise avec =, ce qui n'est pas correct. Il va seulement copier l'adresse et pourra être écrasé par autre chose plus tard (par mon string p par exemple). Mais si c'est bien ça le problème pourquoi ça marcherait chez toi ?

    Si j'utilise seulement les strings au lieu des char* le problème semble résolu.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    L'erreur viens de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    name = name_prov.substr(0, name_prov.size()-4).c_str();
    Tu ne peux pas conserver le résultat de c_str() car l'objet string retourné par la fonction substr() sera détruit à la fin de l'expression.

  5. #5
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par 5kippy Voir le message
    Ah ouais ? Bizarre... j'ai bien tout recompilé, et vérifié, et je ne crois pas avoir de code similaire ailleurs !

    Ce qu'on vient de me suggérer comme explication c'est que j'ai pas alloué la mémoire pour mon const char* name, et que je l'initialise avec =, ce qui n'est pas correct. Il va seulement copier l'adresse et pourra être écrasé par autre chose plus tard (par mon string p par exemple). Mais si c'est bien ça le problème pourquoi ça marcherait chez toi ?

    Si j'utilise seulement les strings au lieu des char* le problème semble résolu.
    J'aurais suggéré la même chose et ajouté de l'implémentation de string est pas la même partout et donc il se peut que dans un cas le pointeur vers les données du string soit partagé (même adresse pointée) par plusieurs strings jusqu'à ce que l'un des strings soit modifié.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Modifier valeur cellule à partir d'une autre cellule
    Par TiteufBSB dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/03/2011, 12h39
  2. Popup personalisé qui s'ouvre quand on clique sur une pub.
    Par XpFive dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/06/2009, 09h02
  3. Modifier les définition CSS - Modifier dynamiquent la hauteur d'une page
    Par tavarlindar dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/05/2008, 19h31
  4. Modifier un code source via une autre appli XLS
    Par dialdre dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2007, 08h10
  5. Modifier un code source via une autre appli XLS
    Par miko91 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/08/2007, 15h00

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