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 :

pourquoi ça fonctionne ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Par défaut pourquoi ça fonctionne ?
    slt j'ai écrit un bout de code qui lorsqu'on l'exécute doit normalement causer un bug mais a ma grande surprise ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main()
    {
        char* t;
        t=new char[10];
        t="toto";
        puts(t);
         delete []t; //libération du pointeur
         puts(t);//ça marche !
        return 0;
    }
    si quelqu'un peut m'expliquer comment ça a bien pu fonctionner je lui serais reconnaissant.
    Merci

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Salut, la tu as juste libéré la mémoire.
    En fait, quand tu libères de la mémoire, elle reste inchangée, c'est juste qu'elle peut être utilisée comme espace de stockage par une autre variable.

    Apparement, là, ça veut dire que pour l'instant aucune variable ou chose extérieure n'a occupé cet espace, mais je suis sûr que si tu arrives 1000 lignes de codes plus loin, alors là ça ne t'afficheras plus ToTo.

    Enfin, là tu ne touche pas à la mémoire, tu ne fais que la lire, donc je crois pas que ça puisse causer un quelconque bug.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    La je me demande comment ça peut compiler, tu stockes un const char* dans un char*.

  4. #4
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Ah oui j'avais pas capté.

    En fait en faisant ça tu changes carrément l'adresse que contient le pointeur.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Par défaut
    la je me demande comment ça peut compiler, tu stockes un const char* dans un char*.
    >j'utilise code::blocks sous win Xp et il n'a afficher aucun warnings.
    Ah oui j'avais pas capté.
    En fait en faisant ça tu changes carrément l'adresse que contient le pointeur.
    >Désolé j'ai pas compris comment ça peut changer l'adresse du pointeur.

  6. #6
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	char *a = new char[10];
     
    	cout << (void*) a << endl;
     
    	a = "abc";
     
    	cout << (void*) a << endl;
    Ce que tu vois affiché ce sont les adresses des pointeurs.

    Quand tu fais directement a = ...., vu que a est une variable qui contient une adresse, que veux-tu qu'il fasse d'autre que changer cette adresse? (vers une zone qui contient "abc")
    Si tu veux changer la mémoire pointée, utilise strcpy.

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

Discussions similaires

  1. pourquoi linux fonctionne même avec un programme qui fait une boucle while(1) ?
    Par morpheusmg dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 23/12/2011, 17h49
  2. pourquoi cela fonctionne dans un cas et pas dans l'autre ?
    Par Attila54 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 01/10/2010, 15h40
  3. Pourquoi Free fonctionne dans un cas et pas dans l'autre
    Par BuzzLeclaire dans le forum Langage
    Réponses: 8
    Dernier message: 25/01/2009, 14h04
  4. Pourquoi Firefox fonctionne et pas IE ?
    Par dinette dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 12/10/2008, 13h42
  5. Réponses: 6
    Dernier message: 11/07/2007, 13h29

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