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 :

Probleme d'allocation Memoire d'un tableau de 2 dimensions


Sujet :

C

  1. #1
    Membre confirmé Avatar de highlight
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut Probleme d'allocation Memoire d'un tableau de 2 dimensions
    Bonjour à tous, j'ai un petit probleme classique dans l'allocation d'un tableau de deux dimensions. Ce que j ai dans mon code est tres simple:

    Je declare une structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
        int nbr_ligne;
        float **Tableau;
    } Objet;
    Lorsque je recupere le nombre des lignes (nbr_ligne) Je fait une allocation memoire du champ Tableau (qui est d'ailleurs de deux dimensions [nbr_ligne]x[3]):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (int i = 0 ; i < nbr_ligne ; i++)
        Objet.Tableau[i] = new float[3];
    Mais ça marche pas, je sais pas ou se trouve l erreur...
    Merci à vous

  2. #2
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    Il faut d'abord allouer ton tableau du nombre de sous tableau avant d'allouer ce qu'il y a dedans ^^

  3. #3
    Membre confirmé Avatar de highlight
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut
    Peux tu etre clair stp merci. J ai bien saisi ce que tu veux dire

  4. #4
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    Le new suppose que tu es en C++ et non en C ... je me trompe Oo
    Je n'ai pas fait de C++, donc la syntaxe n'est peut être pas bonne ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Objet.Tableau = new *float[Objet.nbr_ligne];
    for (int i = 0 ; i < Objet.nbr_ligne ; i++)
      Objet.Tableau[i] = new float[3];
    En C ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Objet.Tableau = malloc(Objet.nbr_ligne*sizeof(float*));
    for (int i = 0 ; i < Objet.nbr_ligne ; i++)
      Objet.Tableau[i] = malloc(3*sizeof(float));

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Deux raisons pour lesquelles ça ne marche pas :

    1) new n'existe pas en C.

    2) Objet est un type, pas un objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
    int nbr_ligne;
    float **Tableau;
    } Objet;
    Donc ne peut pas compiler.

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    En gros voici ce qu'il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Objet MonObjet;
    MonObjet.nbr_ligne = ...;
    MonObjet.Tableau = malloc(MonObjet.nbr_ligne * sizeof(MonObjet.Tableau[0]));
    for(i = 0; i < MonObjet.nbr_ligne; i++)
    {
        MonObjet.Tableau[i] = malloc(3 * sizeof(MonObjet.Tableau[0][0]));
    }
    [Tuto] Allocation dynamique de mémoire en C

    Il ne faut pas oublier d'ajouter la gestion des erreurs et la libération des différents blocs alloués à la fin.

  7. #7
    Membre confirmé Avatar de highlight
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Novembre 2008
    Messages : 139
    Par défaut
    Merci à tous pour vos reponses ...

    Juste une petite correction de ligne de commande pour l'allocation memoire en C++, au lieu de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Objet.Tableau = new *float[Objet.nbr_ligne];
    il faut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Objet.Tableau = new float*[Objet.nbr_ligne];
    Merci encore ...

  8. #8
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Même en C++ il faut d'abord instancier l'Objet (Objet MonObjet ...).

  9. #9
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    Citation Envoyé par highlight Voir le message
    Merci à tous pour vos reponses ...

    Juste une petite correction de ligne de commande pour l'allocation memoire en C++, au lieu de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Objet.Tableau = new *float[Objet.nbr_ligne];
    il faut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Objet.Tableau = new float*[Objet.nbr_ligne];
    Merci encore ...
    Autant pour moi ...
    J'avais prévenu que je ne connaissais pas le C++ ^^'

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

Discussions similaires

  1. Probleme d'allocation memoire
    Par kimikimi dans le forum C
    Réponses: 2
    Dernier message: 05/04/2011, 10h55
  2. Probleme d'allocation memoire
    Par jkofr dans le forum Bibliothèque standard
    Réponses: 7
    Dernier message: 22/01/2010, 00h53
  3. Probleme d'allocation memoire et free()
    Par Darksnakes dans le forum Débuter
    Réponses: 6
    Dernier message: 19/03/2008, 18h53
  4. Problèmes d'allocation memoire
    Par nina2007 dans le forum Linux
    Réponses: 0
    Dernier message: 16/08/2007, 16h19
  5. Réponses: 2
    Dernier message: 05/03/2007, 18h37

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