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 :

new char[size] aloue plus que size


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut new char[size] aloue plus que size
    j'ai eu petite problème dans programme, en essuyant de comprendre ou réside le probelem j'ai découvert ceci .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string str;
        getline( cin , str );
        size_t size = str.size() + 1;
        char * Mot = new char[ size ];
        cout << (int)size << endl;
        cout << (int)strlen(Mot) << endl;
    si on exécute ce bout de code on remarque que strlen donne un nombre supérieure a strlen alors qu'on viens d'allouer size char pour Mot, comment ca se peut.

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 61
    Par défaut
    Bonjour,

    Pour moi le probleme que tu penses avoir, vient du fait que tu new un char * et que apres tu veux faire un strlen, mais entre temps tu as rien fait avec ton char *, donc tu fais un strlen de rien du tout, c est peut-etre la que vient le probleme, si tu remplis ton char *Mot, peut-etre que ca ira mieux.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    strlen s'arrête sur le premier caractère \0 qu'il trouve. Or sur de la mémoire non initialisée comme ici, ce \0 peut se trouver n'importe où, y conpris en dehors de l'espace alloué.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    En plus, il est généralement déconseillé de vouloir gérer les chaînes de caractères à la manière "C style"(tableau de caractère terminé par '\0')...

    Si - *vraiment* - il te faut la valeur d'une chaîne au format C style, tu peux tout simplement utiliser la méthode c_str() fournie avec la classe std::string.

    Entre-temps, il est bien plus sécurisant d'utiliser exclusivement la std::string (et ses acolytes istringstream/ostringstream si tu a des conversions à faire) aussi loin que possible pour t'éviter tous les problème inhérants aux tableaux alloués dynamiquement (nécessité d'utiliser strcpy/memcpy ou similaires, risque de dépassement de capacité, oubli de désallocation de ressources, j'en passe et de meilleures )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    j' ai fais attention a ça, en fait ce que je fait juste après c'est mettre str dans Mot mais mon compilateur me donne un avertissement, mon programme fonctionne, mais ça fais pas très beau mon avertissement à cause de strncpy

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par lastrecrue Voir le message
    j' ai fais attention a ca, en fait ce que je fai juste apres c'est metre str dans Mot mais mon compilateur me donne un warning, mon programme fonctionne, mais ca fais pas tres beau mon warning acause de strncpy
    Heuu... Et avec le décodeur, ca donne quoi

    Désolé, mais là, j'ai un mal fou à comprendre
    • ce que tu écris
    • ce que tu as fait

    Et je présumes que je ne suis pas le seul dans le cas
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Qu'est-ce-que perl à de plus que les autres ?
    Par Celelibi dans le forum Langage
    Réponses: 7
    Dernier message: 24/08/2005, 01h00
  2. height: encore plus que 100%
    Par Anduriel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/06/2005, 13h56

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