Bonjour,

Je n'arrive pas à entrer des valeurs entières (par la fonction scanf dans la fonction donnees_tab du code suivant) dans un tableau à deux dimensions créé dynamiquement (erreur de segmentation).
Je n'arrive pas à voir qu'est-ce qui colle.
Par soucis de pédagogie (exercice destiné à des élèves de 1ere année de fac d'info), la manipulation des données lues et entrées se fait uniquement par pointeur.
Merci à vous.

Voici une partie du code:

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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <stdio.h>
#include <stdlib.h>
#define TAILLE 10
 
//Fonction d'initialisation de tableau a deux dimensions
void initialisation_tab(int **, int **, int *, int *);
//Fonction d'allocation memoire pour tableau
void allocation(int **, int **, int *, int *,int);
//Fonction de saisie des éléments d'un tableau
void donnees_tab(int **,int **, int *, int *);
//Fonction affichant les éléments d'un tableau
void affichage(int **,int **, int **, int **,int *, int *, int);
 
int main()
{
    int nb_ligne,nb_colonne;
    int **tab=NULL, **p1=NULL,**p2=NULL,**tab2=NULL;
    int trans=0,mat=0;
 
    initialisation_tab(tab,p1,&nb_ligne,&nb_colonne);
 
    allocation(tab,p1,&nb_ligne,&nb_colonne,mat);
 
    mat=1;
    //création d'un tableau
    allocation(tab2,p2,&nb_ligne,&nb_colonne,mat);
 
    donnees_tab(tab,p1,&nb_ligne,&nb_colonne);
 
    printf("\nAffichage avant inversion : \n");
 
    affichage(tab,p1,tab2,p1,&nb_ligne,&nb_colonne,trans);
 
 
    free(tab);
    free(tab2);
 
    return 0;
}
void initialisation_tab(int **tab, int **p1, int *nb_ligne, int *nb_colonne)
{
    do
    {
       printf("Veuillez entrer le nombre de ligne du tableau a 2 dimensions (maximum : %d) : ",TAILLE);
       scanf("%d",nb_ligne);
    }while((*nb_ligne<1)||(*nb_ligne>TAILLE));
 
    do
    {
       printf("Veuillez entrer le nombre de colonne du tableau a 2 dimensions (maximum : %d) : ",TAILLE);
       scanf("%d",nb_colonne);
    }while((*nb_colonne<1)||(*nb_colonne>TAILLE));
 
 
}
 
void allocation(int **tab, int **p1, int *nb_ligne, int *nb_colonne,int mat)
{
    int i, **tab2=NULL;
    int nb_ligne_tmp, nb_colonne_tmp;
 
    if(mat==1)
    {
        nb_ligne_tmp=*nb_ligne;
        nb_colonne_tmp=*nb_colonne;
        tab2=tab;
        *nb_ligne=TAILLE;
        *nb_colonne=TAILLE;
    }
 
    tab=(int **)malloc(*nb_ligne*sizeof(int *));
 
    for(i=0; i<*nb_ligne; i++)
   {
       tab[i]=(int *)malloc(*nb_colonne*sizeof(int));
        if ( tab == NULL)
        {
            exit(0);
        }
   }
 
   *nb_ligne=nb_ligne_tmp;
   *nb_colonne=nb_colonne_tmp;
}
 
 
void donnees_tab(int **tab,int **p1, int *nb_ligne, int *nb_colonne)
{
    int i,j;
    p1=tab;
 
    printf("\nvaleur de nb_ligne=%d et de nb_colonne=%d\n",*nb_ligne,*nb_colonne);
    for(i=0; i<(*nb_ligne); i++)
    {
        for(j=0; j<(*nb_colonne); j++)
        {
            printf("Veuillez entrez la valeur de l\'entier dans l\'emplacement tab[%d][%d] : ",i,j);
            fflush(stdin);
            scanf("%d",*(p1+i)+j);
        }
    }
 
}
 
void affichage(int **tab,int **p1, int **tab2, int **p2, int *nb_ligne, int *nb_colonne,int trans)
{
    int i,j,aux;
    p1=tab;
 
    if(trans==1)
    {
        aux=*nb_ligne;
        *nb_ligne=*nb_colonne;
        *nb_colonne=aux;
        p1=tab2;
    }
 
    for(i=0; i<*nb_ligne; i++)
    {
        for(j=0; j<*nb_colonne; j++)
        {
            printf("%3d",*(*(p1+i)+j));
        }
    printf("\n");
    }
}