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 :

structure avec tableau multidimentionnel


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 10
    Points
    10
    Par défaut structure avec tableau multidimentionnel
    bonsoir,
    je sollicite de votre aide pour résoudre un problème ou plutôt un exercice qui devrait être simple, mais qui me tiens derrière mon écran depuis 5 heures...

    il se décompose en 2 fonction et une structure :

    la structure avec un tableau de 2 dimension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    struct matrice
    {
    	int **matriceTab;
    	int ligne;
    	int colone; 
    };
    typedef struct matrice matrice;
    son initilisateur qui définit les tailles de tous les contenus de la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    void matriceBuilder(matrice **ma,int ligne, int colone)
    	{
    		int i;
    		ma->matriceTab = (int**)malloc(ligne * sizeof(int**));
    		for(i = 0; i < colone; i++)
    		{
    			ma->matriceTab[i] = (int*)malloc(colone * sizeof(float));
    		}
    		ma->colone = colone;
    		ma->ligne = ligne;
    	}
    le main qui créer une instance et la passe en paramètre a l'initialisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include<stdio.h>
    #include<stdlib.h>
    #include"matrice.h"
    int main(int argc, char *argv[])
    {
     
    	int i;
    	matrice *ma ;
    	matriceBuilder(&ma,9,9);
    }
    et j'ai un problème récurent de core dumped, je pense que ça viens de ma façon de faire passer ma structure ou mon pointeur...

    merci par avance

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Alternative451 Voir le message
    bonsoir,
    je sollicite de votre aide pour résoudre un problème ou plutôt un exercice qui devrait être simple, mais qui me tiens derrière mon écran depuis 5 heures...

    il se décompose en 2 fonction et une structure :

    la structure avec un tableau de 2 dimension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    struct matrice
    {
    	int **matriceTab;
    	int ligne;
    	int colone; 
    };
    typedef struct matrice matrice;
    son initilisateur qui définit les tailles de tous les contenus de la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    void matriceBuilder(matrice **ma,int ligne, int colone)
    	{
    		int i;
    		ma->matriceTab = (int**)malloc(ligne * sizeof(int**));
    		for(i = 0; i < colone; i++)
    		{
    			ma->matriceTab[i] = (int*)malloc(colone * sizeof(float));
    		}
    		ma->colone = colone;
    		ma->ligne = ligne;
    	}
    le main qui créer une instance et la passe en paramètre a l'initialisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include<stdio.h>
    #include<stdlib.h>
    #include"matrice.h"
    int main(int argc, char *argv[])
    {
     
    	int i;
    	matrice *ma ;
    	matriceBuilder(&ma,9,9);
    }
    et j'ai un problème récurent de core dumped, je pense que ça viens de ma façon de faire passer ma structure ou mon pointeur...

    merci par avance
    Hé oui. Tu n'es pas encore arrivé à dissocier "conteneur" et "contenant"

    Ton type "matrice" (vaudrait mieux que tu le nommes "t_matrice" pour bien montrer qu'il s'agit d'un type) est devenu, par ta création, un type intégralement disponible dans ton code. Il a la même valeur qu'un type "int" ou "double". Tu peux créer des variables de ce type, le manipuler, etc.
    Même si ce type "complexe" contient un tableau 2D, lui-même n'est pas un tableau 2D mais un simple type pris comme un type de base donc faut t'en servir comme tel. Soit tu crées une variable "ma" de type "matrice", soit tu crées une variable "ma" de type "pointeur sur matrice" mais ensuite tu dois allouer de la mémoire pour ce type mais en aucun cas ce sera un pointeur de pointeur...

    Donc ta définition et ta fonction sont presque parfaite
    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
    typedef struct 
    {
    	int **matriceTab;
    	int ligne;
    	int colone; 
    } t_matrice;
    
    void matriceBuilder(t_matrice *ma,int ligne, int colone)
    	{
    		int i;
    		ma->matriceTab = (int**)malloc(ligne * sizeof(int**));
    		for(i = 0; i < colone; i++)
    		{
    			ma->matriceTab[i] = (int*)malloc(colone * sizeof(int));
    		}
    		ma->colone = colone;
    		ma->ligne = ligne;
    	}
    Et ensuite le traitement se fait directement avec une variable simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include<stdio.h>
    #include<stdlib.h>
    #include"matrice.h"
    int main(int argc, char *argv[])
    {
     
    	int i;
    	t_matrice ma ;
    	matriceBuilder(&ma,9,9);
    }
    ou bien avec pointeur alloué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include<stdio.h>
    #include<stdlib.h>
    #include"matrice.h"
    int main(int argc, char *argv[])
    {
     
    	int i;
    	t_matrice *ma ;
    	ma=malloc(sizeof(t_matrice));
    	matriceBuilder(ma,9,9);
            free(ma);
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Surpuissant, je n'avais pas pensé que la structure ne pouvais pas allouer la mémoire pour elle même...
    pour le pointeur de pointeur c'été la grande panique et j'ai copié coller la dernière version de mon code sans réfléchir à ma dernière modification, je suis pardonné ?

    Merci pour le coup de main. je teste et je feed back.

    -----
    super merci : pour l'enlevage de grosse épine sous le pied

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

Discussions similaires

  1. Comparaison de structures avec tableau ?
    Par Nikolas dans le forum C++
    Réponses: 26
    Dernier message: 01/11/2010, 17h06
  2. StructLayout : structure avec tableau
    Par tyarcaouen dans le forum C#
    Réponses: 3
    Dernier message: 29/09/2008, 00h01
  3. Allocation d'une structure avec tableau
    Par line86 dans le forum C
    Réponses: 5
    Dernier message: 02/10/2007, 11h38
  4. un tableau multidimentionnel avec des variable de type different ?
    Par sebsmax dans le forum Collection et Stream
    Réponses: 25
    Dernier message: 18/01/2007, 14h30
  5. procedure avec tableau multidimentionnel
    Par cfalcot dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2006, 20h25

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