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 :

Prb types array subscript


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Par défaut Prb types array subscript
    Bonjour à tous,
    une erreur de types se produit dans ma boucle ce qui me génére l'erreur invalid types float[int] in array subscript.

    Je réalise un générateur de flottant via l'appel d'une fonction:


    Déclarations des variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        int i,j, lig, col;
            float* tab;

    Voici mon code de la boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      for (i=0; i<lig; i++)
             for (j=0; j<col; j++){
     
                   tab[i][j]= nombrAlea(nbr1,nbr2);
                   }
    Voici le code de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    float  nombrAlea(float a, float b){
            return ( rand()/(float)RAND_MAX ) * (b-a) + a;
    }
    Merci d'avance

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    float* tab;
    (...)
    tab[ i ][ j ]= ...
    tab est de type float *.
    Donc, tab[ i ] (ce qui revient à écrire *(tab + i) ) est de type float, car tu lis ici l'élément "i" du tableau, qui est un float.
    Donc, si tu écris tab[ i ] [ j ], tu essayes de déréférencer une variable de type float, ce qui est impossible. On ne peut déréférencer uniquement des pointeurs.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Par défaut
    Ok, donc comment puis-je résoudre le problème?
    Car je dois obligatoirement travailler avec des float pour mon générateur et meme en int j'ai le soucis d'erreur int[int]...

  4. #4
    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
    Car je dois obligatoirement travailler avec des float
    Le problème n'est pas là. Le problème c'est que tu tentes de déréférencer un type de variable, qui n'est pas un pointeur.

    Il faut faire de l'allocation dynamique classique.

    1) tab doit être de type float **.

    2) Il faut créer un tableau, ayant "nbre_lignes" éléments, chacun de ses éléments étant de la taille d'un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tab = malloc( sizeof *tab * nbre_lignes);
    3) Il faut ensuite créer un tableau pour chaque ligne, ayant "nbre_colonnes" éléments, chacun de ses éléments étant de la taille d'un float :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (i = 0 ; i < nbre_lignes ; i++)
    {
       tab[ i ] = malloc(sizeof **tab * nbre_colonnes);
    }
    Il ne faut pas oublier de tester le retour de chaque malloc. Je ne l'ai pas fait ici.

    Ensuite, cela te permettra d'accéder aux éléments du tableau, via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tab [ligne] [colonne] = ...
    Une fois que tu n'as plus besoin de ton tableau, il faut penser à faire un free pour chaque des allocations, dans l'ordre inverse.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Par défaut
    Merci à toi, j'ai résolu mon problème :
    -en redéclarant correctement mon tab ** (j'avais déclaré 1 D)
    - en appelant ma fonction d'allocation mémoire
    Et ça marche

    Bonne aprem

Discussions similaires

  1. erreur :invalid types ‘bool[int]’ for array subscript
    Par ferhat.adel dans le forum Débuter
    Réponses: 1
    Dernier message: 10/06/2013, 18h56
  2. Erreur : invalid types «int[int]» for array subscript
    Par fabrice91 dans le forum Débuter
    Réponses: 9
    Dernier message: 01/10/2010, 16h00
  3. [Tableaux] Argument de type array dans __construct ??
    Par shadeoner dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2006, 20h03
  4. [Tableaux] Variable de type array dans un formulaire
    Par ThAOTh dans le forum Langage
    Réponses: 3
    Dernier message: 14/03/2006, 17h49
  5. Array subscript has type 'char'
    Par obelix dans le forum C
    Réponses: 11
    Dernier message: 31/10/2005, 18h21

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