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 avec l'allocation d'un tableau dynamique !


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut Problème avec l'allocation d'un tableau dynamique !
    Salut !


    J'ai un problème incroyablement idiot qui me prend la tête depuis des heures

    Voilà, je déclare un tableau de int à 2D (initialisé à NULL) au lancement de mon prog; je le passe en paramètre à une fonction dans laquelle il va être alloué à sa "vraie" dimension. Or, au sortir de cette fonction, lors d'une affectation de valeur à une case du tableau, BOUM, big plantage !!! Et je vois absolument pas où ça cloche ...


    Ci-dessous, j'ai mis le code le plus épuré possible :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main()
    {
      int * * graphe = NULL;
      initgraphe( graphe);
      graphe[0][0]=9;  
      return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void initgraphe( int * * graphe )
    {
      int i;
      graphe = malloc( 7 * sizeof( int * ) );
      for ( i = 0; i < 7; i++ )
      {
        graphe[i] = malloc( 7 * sizeof( int ) );
      }
    };

    Si vous voyez ce qui cloche ...

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Mike888
    Ci-dessous, j'ai mis le code le plus épuré possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main()
    {
      int * * graphe = NULL;
      initgraphe( graphe);
      graphe[0][0]=9;  
      return 0;
    }
    Tu t'es déjà fait prendre là-dessus :

    1 : régler son compilateur

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

    2 : étudier les passages de paramètres

    http://emmanuel-delahaye.developpez....difie_variable

    A tous : prenez des notes, faites vous des fiches, des cahiers, une base de données, un site web (c'est ce que j'ai fait), je ne sais quoi, mais ne revenez pas toujours avec les même erreurs...
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Mister Delahaye,

    Vos explications sont toujours aussi efficaces mais toujours aussi incompréhensibles


    Je me doute bien que c'est dans le passage de paramètre que ça coince... Et je ne vois pas où exactement !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Bon, je me calme ...


    Dernière question; dans l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    err |= tab[i] == NULL;
    que signifie le :


  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Mike888
    Je me doute bien que c'est dans le passage de paramètre que ça coince... Et je ne vois pas où exactement !
    En C, le passage des parametres se fait par valeur.

    La fonction initgraphe() travaille donc sur une copie de graphe. Cette copie est bien modifiee dans la fonction. Mais lorsque tu reviens dans la fonction appelante, graphe n'a pas ete modifie (puisque tu as travaille sur une copie de celui-ci) et vaut onc toujours NULL, d'ou le probleme.

    Il faut donc soit passer l'adresse de graphe en parametre de la fonction, soit faire retourner a la fonction initgraphe() le graphe alloue.

    En outre avant d'utiliser graphe il est indispensable de tester si il n'est pas NULL (les allocations peuvent echouer).

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Mike888

    est equivalent a | etant l'operateur OU binaire

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Ok merci pour ces explications !

    J'avais evidemment essayé de passer par adresse (et non par valeur, mais ça plantait tout autant ...); donc, je me suis rabattu sur une fonction qui renvoie un int**


  8. #8
    Membre actif 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
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tu t'es déjà fait prendre là-dessus :

    1 : régler son compilateur

    http://emmanuel-delahaye.developpez....tm#cfg_compilo
    C'est possible de configurer simplement le compilateur de visual studio?

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par lun4t1k
    C'est possible de configurer simplement le compilateur de visual studio?
    Sur VC++6 il y avait un "warning level" (1 à 4) reglé à 3 par défaut. Le jour où je l'ai mis sur 4, j'ai commencé à comprendre le C...
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Mike888
    Mister Delahaye,

    Vos explications sont toujours aussi efficaces mais toujours aussi incompréhensibles
    Tu as réglé ton compilateur ? Tu as lu mon article ?
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre actif 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
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Sur VC++6 il y avait un "warning level" (1 à 4) reglé à 3 par défaut. Le jour où je l'ai mis sur 4, j'ai commencé à comprendre le C...
    Ok merci je vais fouiller voir si je trouve quelque chose qui y ressemble

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

Discussions similaires

  1. [FPDF] problème avec les images dans un tableau dynamique
    Par GADSN dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 08/04/2009, 11h11
  2. Echec d'allocation d'un tableau dynamique
    Par le y@m's dans le forum WinDev
    Réponses: 1
    Dernier message: 09/05/2007, 16h24
  3. Réponses: 2
    Dernier message: 31/08/2006, 14h11
  4. Problème avec les espaces dans un tableau !
    Par remixtech dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 10/07/2006, 19h30
  5. Problème avec les styles d'un tableau
    Par psychoBob dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 20/05/2006, 03h13

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