Annonce

Réduire
Aucune annonce.

[C] Double tableau de structure HELP

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • [C] Double tableau de structure HELP

    Bonjour a tous !

    Pour un projet je voudrais faire un double tableau de structure
    mais lorsque je fais (list[y][x])->value = 42; Je segfault ...
    Je pense que le problème vien de mon malloc ..
    Sachant que j'ai declarer ma strucute en ***list; afin de mettre -> au lieu de .
    je dois malloc chaque list[y][x] je pense mais avant ca, je dois malloc toute ma liste ... et sa je sais pas trop comment faire ...
    voici mon malloc actuel
    list = (t_point ***)malloc(sizeof(t_point *) * 10000);
    10000 etant pour tester, ce seras (y_max * x_max) je pense .. ?

    Merci d'avance a tous !

  • #2
    Hello,

    Je peux voir ta/tes structure ?

    Commentaire


    • #3
      Merci,

      typedef struct s_point
      {
      int x;
      int y;
      int value;
      struct s_point *next; // je partais sur une liste chainee .. mais je me prendrais la tete pour la suite..
      } t_point;

      Commentaire


      • #4
        Il faut travailler par étape, sinon tu ne t'en sortiras pas... Voici le mode d'emploi sous forme de code.

        Code:
        #include <stdio.h>
        #include <stdlib.h>
        
        typedef struct s_point
        {
        	int x;
        	int y;
        	int value;
        	struct s_point *next;
        } t_point;
        
        t_point **createColumn(int n);
        t_point ***createLine(int n, int c);
        
        int main(void){
        
        	int i, j;
        	t_point ***res = createLine(5, 10); /* 5 lignes 10 colonnes */
        
        	for (i=0; i<5; i++){
        		for (j=0; j<10; j++){
        			res[i][j]->value = 42; /* Toutes les valeurs initialisées à 42 */
        		}
        	}
        
        	printf("La valeur de la deuxième ligne, troisième colonne est : %d\n", res[1][2]->value);
        
        	/* Libération de toutes les mémoires allouées */
        	for (i=0; i<5; i++){
        			for (j=0; j<10; j++){
        				free(res[i][j]); /* Libération des colonnes */
        			}
        		free(res[i]); /* Libération des lignes */
        	}
        
        	free(res); /* Libération du tableau */
        
        	return 0;
        }
        
        t_point **createColumn(int n){
        
        	int i;
        
        	t_point **result = malloc(sizeof(t_point *) * n);
        	if (result == NULL) exit(EXIT_FAILURE);
        
        	/* Ne pas oublier d'allouer de la mémoire pour t_point */
        	for (i=0; i<n; i++){
        		result[i] = malloc(sizeof(t_point));
        		if (result == NULL) exit(EXIT_FAILURE);
        	}
        
        	return result;
        }
        
        t_point ***createLine(int n, int c){
        
        	int i;
        	t_point ***res = malloc(sizeof(t_point **) * n);
        	if (res == NULL) exit(EXIT_FAILURE);
        
        	for (i=0; i<n; i++)
                    res[i] = createColumn(c); /* On utilise notre fonction createColumn où tout a été prévu */
        								  /* niveau allocation */
        
        	return res;
        }

        Commentaire


        • #5
          Je dirais qu'une chose.
          MERCI MILLE FOIS !

          Commentaire


          • #6
            Il y a un bouton Thanks pour remercier en bas à gauche du topic que tu souhaites remercier...

            Commentaire


            • #7
              Envoyé par fred Voir le message
              Il y a un bouton Thanks pour remercier en bas à gauche du topic que tu souhaites remercier...
              Done.

              Commentaire

              Chargement...
              X