bonjour,
Je réalise un programme avec un tableau 2D en allocation dynamique.
Pour les valeurs du tableaux et sa taille, j'utilise une structure mais je n'arrive pas à récupérer les valeurs.
Lorsque je compile, je n'est ni erreurs, ni warning. Lorsque j'exécute il me met cette erreur :
Code:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x01405627.
à cette ligne :
Code:t[i]->valeur_tab = insersion_valeurs_tab(t[i]->valeur_tab, l, val);
Voici mon code complet, merci pour votre aide :
Code:#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct tab tab; struct tab { int valeur; tab **valeur_tab; }; tab **insersion_valeurs_tab(tab **t, int l, int val) { int i, j, colonne = 1; /********************************* * Déclaration du tableau a 2D dyn* **********************************/ if(t==NULL) { t=((tab **)malloc(l * sizeof(tab*))); for(i=0;i<l;i++) t[i]=((tab*) malloc(3 * sizeof (tab))); t[i] -> valeur = val; t[i]->valeur_tab[j] = NULL; } else t[i]->valeur_tab = insersion_valeurs_tab(t[i]->valeur_tab, l, val); return t; } void valeurs_tableau2D_dyn () { /************************************* * Saisies valeurs du tableau a 2D dyn* **************************************/ int i, j, ligne, val; tab **t; printf("Donnez le nombre de ligne de tab: "); scanf("%d", &ligne); for(i=0;i<ligne;i++) { for(j=0;j<3;j++) { printf("Donnez les valeurs de tab, val tab num : "); scanf("%d", &val); t = insersion_valeurs_tab(t, ligne, val); } } printf("\n"); } void affiche_tab_2D_dyn(tab **t) { /******************************* * Affichage du tableau a 2D dyn* ********************************/ int i, j, ligne, colonne = 1; if(t==NULL) return; printf("val tableau 2D dyn\n"); for(i=0;i<ligne;i++) { printf("ligne %d\n",i); for(j=0;j<3;j++) printf("val1= %d\t", t[i] -> valeur_tab[j] -> valeur); printf("\n"); } } int main (void) { tab **t = NULL; printf("\n**********tab 2D dyn**********\n"); while (1){ valeurs_tableau2D_dyn (); affiche_tab_2D_dyn(t); //Libération de la mémoire for(i=0;i<ligne;i++) free(tab[i]); free(tab); } return 0; }
-----