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 :

Passage d'un tableau dynamique à 2 dimensions en paramètre


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 24
    Points
    24
    Par défaut Passage d'un tableau dynamique à 2 dimensions en paramètre
    Bonjour tous,

    Je ne suis pas un grand programmeur, je programme surtout quand on me le demande pour mes cours, ce qui explique que je passe parfois beaucoup de temps sur des choses simples, comme ce problème.

    J'ai créé un tableau dynamique à 2 dimensions dans mon main de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int ** tab = (int**)malloc((nb_var+nb_equ+2)*sizeof(int));
    	for(i = 0; i < (nb_equ+2); i++) 
    	{
    		tab[i] = (int*)malloc((nb_var+nb_equ+2)*sizeof(int));
    	}
    Et maintenant j'aimerais passer ce tableau en argument dans une fonction appelée par le main. J'ai essayé plusieurs méthodes, mais aucune n'a marché jusqu'à maintenant. Voici la méthode qui me semblait le plus logique:

    Prototype de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void creation_tab(int **, int, int)
    Appel de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creation_tab(tab, nb_var, nb_equ);
    Déclaration de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creation(int **tab, int nb_var, int nb_equ)
    Et voici l'erreur qu'il me génère:
    SIMPLEX.OBJ : error LNK2001: unresolved external symbol "void __cdecl creation_tab(int * *,int,int)" (?creation_tab@@YAXPAPAHHH@Z)
    Debug/SIMPLEX.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.


    Voila, je suis ouvert à toute proposition, car je bloque uniquement sur ça. Merci d'avance pour vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 421
    Points : 20 580
    Points
    20 580
    Par défaut
    Soit le prototype de la fonction est mal placé ( le mettre dans un .h) soit c'est avec VC++ et un problème de entêtes précompilés

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Je suppose que dans ton vrai code,la déclaration de la fonction n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creation(int **tab, int nb_var, int nb_equ)
    mais bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void creation_tab(int **tab, int nb_var, int nb_equ)
    ?

  4. #4
    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 : 68
    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 Zelltemplar
    J'ai créé un tableau dynamique à 2 dimensions dans mon main de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int ** tab = (int**)malloc((nb_var+nb_equ+2)*sizeof(int));
    	for(i = 0; i < (nb_equ+2); i++) 
    	{
    		tab[i] = (int*)malloc((nb_var+nb_equ+2)*sizeof(int));
    	}
    Déjà ce code mérite des commentaires...

    1- Il est plus complexe que nécessaire. Je vais le recoder selon les principes énoncés ici :

    http://emmanuel-delahaye.developpez....tes.htm#malloc

    et ça va déjà corriger une erreur de taille concernant le premier tableau qui est un tableau de pointeurs sur int et non un tableau d'int...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       int ** tab = malloc ((nb_var + nb_equ + 2) * sizeof *tab);
       for(i = 0; i < (nb_equ + 2); i++) 
       {
          tab[i] = malloc ((nb_var + nb_equ + 2) * sizeof *tab[i]);
       }
    2 - Je m'interroge sur ce que tu veux faire exactement.

    Le principe est : soit à créer un tableau dynamique de type T et de dimensions A x B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       T **t = malloc (sizeof *t * A);
       for (i = 0 i < A; i++)
       {
          t[i] = malloc (sizeof *t[i] * B);
       }
    Quelles sont les dimensions requises ? Si c'est nb_var x (nb_equ + 2), le code est incorrect.

    D'autre part, vérifie que tu compiles bien en C (l'erreur de l'éditeur de lien laisse supposer que tu compiles en C++). L'extension du fichier source doit être .c et non .cpp ni .C.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Points : 24
    Points
    24
    Par défaut
    Merci pour vos réponses. Pour les dimensions du tableau, je veux réellement créer un tableau (nb_equ+2) x (nb_var+nb_equ+2). Merci pour la simplification

    Sinon je compile en effet en c++ mais finalement ca marche quand même. Le probleme venait d'une bête affectation de variable mal effectuée (quand je vous disait que j'étais un bien piètre programmeur ^^). Merci pour vos réponses rapides

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

Discussions similaires

  1. Tableau dynamique à 2 dimensions
    Par koktel_dfr dans le forum C
    Réponses: 9
    Dernier message: 11/05/2007, 17h33
  2. Tableau dynamique à deux dimensions
    Par David Fouejio dans le forum MFC
    Réponses: 4
    Dernier message: 05/03/2007, 10h37
  3. [HashSet] Tableau dynamique à 2 dimensions
    Par ppopov dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/01/2007, 17h21
  4. declaration d'un tableau dynamique 2 dimensions
    Par mike600river dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/05/2006, 09h53
  5. Réponses: 1
    Dernier message: 09/03/2006, 18h25

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