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 :

problème allocation tableau dynamique


Sujet :

C++

  1. #1
    Membre régulier Avatar de ofinot
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 98
    Points : 100
    Points
    100
    Par défaut problème allocation tableau dynamique
    Bonjour à tous

    comme vous l'aurez deviné, je sèche sur un problème d'allocation d'un tableau dynamique dans un constructeur.

    Pour vous situer le contexte, je dois construire une File d'attente avec priorité pour gérer des patients, j'ai donc entre autres les classes:
    Patient
    FileAt -> une file d'attente de patients
    FAP -> une File d'attente avec priorité de patients, gérée à l'aide d'un tableau de FileAt

    Mon problème se situe au niveau du constructeur de FAP, dont voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FAP::FAP()
    {
    	t = new FileAt[MAXI];
    }
    MAXI étant une constante correspondnant à la priorité maximale que je puisse avoir.

    Dans mon main j'ai une seule et unique instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main()
    {
       FAP f;
       return 0;
    }
    et à l'exécution j'ai droit, à
    segmentation fault(core dumped)
    Ce qui m'étonne c'est que si dans le main, à la place de la déclaration de l'objet, je construit "manuellement" un tableau du même type, cela ne pose aucun problème.

    Si quelqu'un a une idée, merci d'avance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Salut.

    Tu définis pas de type pour ta variable.
    Même si apparemment sa compile, c'est pas vraiment propre...
    Normalement tu devrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileAt* t = new FileAt[MAXI];
    En définissant ta variable comme étant un pointeur tu peux l'allouer dynamiquement.

  3. #3
    Membre régulier Avatar de ofinot
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 98
    Points : 100
    Points
    100
    Par défaut
    si si le type de la variable est bien défini c'est un attribut de ma classe, j'aurais peut être du préciser un peu plus:

    voilà la déclaration de la classe:
    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
     
    const int MAXI = 20;
    class FAP
    {
    public:
    	FAP();
    	FAP(const FAP& F);
    	~FAP();
     
    	FAP& add(Patient elem, int priorite);
    	FAP& operator--();
    	FAP& operator=(const FAP& F);
    	bool operator==(const FAP& F);
    	bool operator!=(const FAP& F);
     
    	friend ostream& operator<<(ostream& flux, const FAP& f);
    	Patient& get_element();
     
    private:
    	FileAt* t;
    	int getPrioriteMax() const;
    };

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Comment défini tu ta fille d'attente (FileAt)

    Pourquoi ne pas, tout simplement, si tu as un constructeur par défaut pour ta file d'attente, utiliser la classe std::vector<FileAt> (ou, selon le cas, un std::vector<FileAt*> )

    Tu pourrais alors le déclarer sous la forme de
    et le définir sous la forme de
    et très facilement, pourquoi pas, prévoir de récupérer les différentes files d'attente sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FileAt& FAP::operator[](size_t ind)
    {
        assert(ind<=MAXI);
        return t[ind]; //avec déréférencement si tu utilise un std::vector<FileAt*>
    }
    const FileAt& FAP::operator[size_t ind] const
    {
        assert(ind<=MAXI);
        return t[ind]; //avec déréférencement si tu utilise un std::vector<FileAt*>
    }

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    J'ai pas fais attention mais dans ton main() tu appelle pas ton constructeur.

    On dois faire :

    FAP t();

    Peut être que ton erreur vien de là... (j'aime me sentir utile...)

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    Citation Envoyé par Namtar Voir le message
    JOn dois faire :
    FAP t();
    Peut être que ton erreur vien de là... (j'aime me sentir utile...)
    En fait il l'appelle correctement... pour le compilo FAP t(); ça sera une définition de fonction.

    Donc c'est bien FAP t;

Discussions similaires

  1. allocation tableau dynamique
    Par mdabire dans le forum C
    Réponses: 13
    Dernier message: 07/10/2008, 13h19
  2. Problème de tableau dynamique d'objets
    Par markfish55 dans le forum C++
    Réponses: 2
    Dernier message: 07/06/2008, 13h07
  3. Problème de tableau dynamique en paramètre
    Par sapin dans le forum Langage
    Réponses: 2
    Dernier message: 11/04/2008, 14h33
  4. Problème de tableau dynamique
    Par Vindz dans le forum LabVIEW
    Réponses: 23
    Dernier message: 26/04/2007, 13h27
  5. problème avec tableau dynamique
    Par akrobat dans le forum C++
    Réponses: 7
    Dernier message: 28/04/2006, 15h29

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