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 :

allocation dynamique


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut allocation dynamique
    Bonjour à tous !

    j'ai un petit soucis et je comptais sur vous pour m'aider.
    je dois créer un tableau de structures(Transmetteur) et le remplir avec les données d'un fichier binaire.
    J'arrive bien à créer mon tableau :
    Transmetteur *Tab;
    Tab = new Transmetteur[x];
    J'arrive bien à le remplir :
    File *file;
    fread(Tab,sizeof(Transmetteur),x,file);

    mais là où je ne comprends pas c'est que ça : delete []Tab;
    fais planter mon application ...
    et là où je comprend encore moins c'est que si je ne remplis pas mon tableau avec la fonction fread la commande delete ne pose aucun soucis !...

    si vous avez une idée ...
    merci !

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut

    pointeur != tableau statique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cout << sizeof(Transmetteur) << std::endl;
    std::vector<> et sa fonction membre size() sont tes amis.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    STP, continue les échanges sur les forums plutôt qu'en privé. D'abord parce que je ne me souviens pas de tout ce à quoi je réponds. Ensuite, tes questions peuvent toujours intéresser d'autres débutants. Enfin, dans la journée, d'autres habitués pourraient te répondre. Merci.
    Citation Envoyé par zieg18 en privé
    Merci pour l'astuce mais ça me pose un nouveau problème :

    je n'arrive pas à remplir mon vecteur de structures !
    je m'explique : toutes mes déclarations se passent bien mais lorsque j'utilise la fonction push_back elle remplie n'importe quoi !

    tu es sûr(e) que les vecteurs savent gérer des éléments de type structure ?

    merci pour ton aide

    zieg
    Concernant, les vecteurs, ils savent traiter tous les types qui sont copiables. Donc attention à ceux qui sont responsables de ressources brutes, et à ceux qui sont à sémantique d'entité (et particulier ceux issus de hiérarchies polymorphes).
    Autre détail auquel il faut faire attention: si tu fais un resize (ou construis ton vecteur en lui passant une taille), les premiers éléments ne seront pas forcément affectés, et tes push_back vendront s'empiler après.

    En supposant que tu puisses bien faire un fread (pas de pointeurs, pas de problèmes d'alignement, de problèmes d'endianness, ...) cela donnerait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::ifstream fichier("nomfichier", std::ios_base::in|std::ios_base::binary);
    if (!fichier) throw std::runtime_error("le fichier ne peut être ouvert");
    Transmetteur tmp;
    std::vector<Transmetteur> Tab; // pas de nombre ici
    while (fichier.read(reinterpret_cast<char*>(&tmp), sizeof(tmp))
        Tab.push_back(tmp);
    Comme je l'ai, tout ceci depend de la définition de ton type transmetteur.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. probleme d'allocation dynamique
    Par vince3320 dans le forum C
    Réponses: 10
    Dernier message: 22/04/2004, 16h27
  2. petit pbm allocation dynamique de stringGrid
    Par AnneOlga dans le forum C++Builder
    Réponses: 10
    Dernier message: 17/01/2004, 11h59
  3. Allocation dynamique de structures
    Par fr_knoxville dans le forum C
    Réponses: 8
    Dernier message: 06/05/2003, 21h59
  4. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31
  5. Réponses: 4
    Dernier message: 03/12/2002, 16h47

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