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 :

Malloc et affectation de mémoire


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut Malloc et affectation de mémoire
    Bonjour,

    J'ai un petit soucis quant à l'allocation de mémoire pour un char* avec l'utilisation de malloc.
    Voici mon code (bien allégé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    char *fichier;
    int taille =1504;
     
    if(fichier = (char*)malloc(taille))
              {
     
                    len = strlen( fichier );
                    printf("Taille = %i \n", len);
                    ...
                    //mon code
              }
    Lorsque je fais mon printf, la taille affichée est 1520 (alors que cela devraot etre 1504, non?).
    De plus, lorsque j'affiche ma chaine "fichier" non remplie, j'obtiens en fin de chaine " ²²²²½½½½½½½½¯■¯■ " qui correspondent à ces 16 car en trop...

    Comment rectifier le problème et faire en sorte que fichier ne contienne que 1504 char sans les indésirables de la fin ?

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    La variable fichier n'est pas initialisée après le malloc donc le strlen(fichier) n'a aucun sens.
    Il faudrait affecter une valeur à la variable fichier pour que le calcul de sa taille ait un sens

  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
    Tu es sûr que tu fais du C++ ? Tout ça c'est du pur C.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    arghh,
    oui, c'est vrai que je jongle entre c et c++, désolé.
    Mais dans le cas ou j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char   *fichier = new char[1504]; // 1504, ca pourrait etre un autre nombre, c'est juste que je veux mettre bcp de char...
    au lieu de malloc, ca me fait le meme probleme...

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    Citation Envoyé par ep31
    La variable fichier n'est pas initialisée après le malloc donc le strlen(fichier) n'a aucun sens.
    Il faudrait affecter une valeur à la variable fichier pour que le calcul de sa taille ait un sens
    Soit, mais vu que l'espace mémoire est allouée, cela devrait suffire. Dans mon cas ca m'affiche bien, à peu de chose pret (et c'est ce "peu" qui me dérange!!!), ma taille de 1504 (enfin, cela affiche 1520 mais c'est 1504 que je veux ).

  6. #6
    Membre expérimenté Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par défaut
    pourquoi pas simplement char fichier[1504] ? (meme si ce n'est pas le pb!)
    sinon bzero(&fichier,sizeof(fichier)); m'a évité des trucs... bizarres!

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    Citation Envoyé par lun4t1k
    pourquoi pas simplement char fichier[1504] ?
    C'est simple et j'y avais pas songé... je vais essayé cela ! Merci de m'avoir un peu raffraichi la mémoire lol

    Edit : Finalement, comme la di Laurent Gomila, faut mieux pas alors....

  8. #8
    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
    Soit, mais vu que l'espace mémoire est allouée, cela devrait suffire
    strlen ne fait que parcourir la chaîne jusqu'à rencontrer un 0. Vu que ta chaîne contient n'importe quoi, le résultat est lui aussi n'importe quoi.

    Si ta question est "comment savoir quelle taille est allouée au bout d'un pointeur" alors la réponse est que ça n'est pas possible directement.

    Si tu fais vraiment du C++ alors tu devrais utiliser std::string ou std::vector.

    pourquoi pas simplement char fichier[1504] ?
    Parce que
    // 1504, ca pourrait etre un autre nombre, c'est juste que je veux mettre bcp de char...

  9. #9
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    Il y a n'importe quoi dans ton tableau, et strlen cherche le premier '\0' dedans. Si tu n'as pas de bol, il n'y en a aucun dans tout ton tableau.

    Tu confondrais pas sizeof et strlen ?

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    Citation Envoyé par Ulmo
    Il y a n'importe quoi dans ton tableau, et strlen cherche le premier '\0' dedans. Si tu n'as pas de bol, il n'y en a aucun dans tout ton tableau.

    Tu confondrais pas sizeof et strlen ?
    HEu non, je ne pense pas confondre, strlen permet d'obtenir la taille d'un string donc c'est bien ca...

  11. #11
    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
    Tu as l'air un peu perdu... tu veux faire quoi au juste avec ce tableau ?

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    Bon, je vais m'obstiner une peu (désolé )en changeant légèrement mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int taille2 = 1500;
    char *fichier2 = new char[taille2];
    cout<<"taille :"<< strlen( fichier2 );
    J'ai donc d'affiché "taille :1512" ... Je me demande toujours si le résultat est normal...

  13. #13
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    Citation Envoyé par Chop_chop
    HEu non, je ne pense pas confondre, strlen permet d'obtenir la taille d'un string donc c'est bien ca...
    Et où as-tu vu un string ? Il n'y en a pas dans ton code.

  14. #14
    Membre expérimenté Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par défaut
    char fichier[1504]?

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

Discussions similaires

  1. Allocation mémoire : tableau vs malloc
    Par scorbo dans le forum Débuter
    Réponses: 4
    Dernier message: 15/06/2007, 12h47
  2. Réponses: 20
    Dernier message: 13/02/2007, 11h50
  3. Réponses: 4
    Dernier message: 20/11/2006, 01h02
  4. Recoder malloc -> Questions sur la mémoire
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 15/03/2006, 18h11
  5. Pb d'allocation mémoire malloc
    Par oz80 dans le forum C++
    Réponses: 5
    Dernier message: 18/11/2005, 17h23

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