Bonjour à tous,

J'ai besoin de votre concernant un problème basique (je fais du C depuis 48h, je demande donc votre indulgence ) concernant une portée de variable. Ci-joint mon code dans lequel le main appelle une fonction AllocInitMat allouant l'espace mémoire pour 3 matrices. Cette fonction remplit également les trois matrices (de façon simpliste, pour l'exemple).

Mon problème est le suivant : Je peux très bien, après remplissage, dans la fonction imprimer le contenu des matrices. Cependant, je voudrais que celles-ci restent accessibles dans le main une fois l'exécution de la fonction terminée (pour par exemple les réutiliser dans une autre fonction, etc.).

L'erreur semble donc apparaître lorsque intervient (A semble disparu ou non accessible !):

Que manque t-il à cet exemple ?

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
#include <stdlib.h>
#include <stdio.h>
 
void AllocInitMat(int** , int** , int** , int , int );
 
int main(void){
 
  int dimL = 0, dimC = 0, i = 0, j = 0;
  int** A = NULL;
  int** B = NULL;
  int** RES = NULL;
 
  // Récupération des dimensions
  printf("Nombre de lignes : "); scanf("%d", &dimL);
  printf("Nombre de colonnes : "); scanf("%d", &dimC);
 
  // Allocation et remplissage
  AllocInitMat(A, B, RES, dimL, dimC);
 
  printf("%d", A[0][0]);
 
  // Libération de la mémoire allouée
  free(A); free(B);  free(RES);
 
  return 0;
}
 
void AllocInitMat(int** matA, int** matB, int** matC, int nbL, int nbC){
  int i = 0, j = 0;
 
  matA = (int**)malloc(nbL*sizeof(int*));
  matB = (int**)malloc(nbL*sizeof(int*));
  matC = (int**)malloc(nbL*sizeof(int*));
 
  for (i = 0; i < nbL; i++){
    matA[i] = (int*)malloc(nbC*sizeof(int));
    matB[i] = (int*)malloc(nbC*sizeof(int));
    matC[i] = (int*)malloc(nbC*sizeof(int));
  }
 
  for (i = 0; i < nbL; i++){
    for (j = 0; j < nbC; j++){
      matA[i][j] = (i == j) ? 2 : 0;
      matB[i][j] = (i == j) ? 3 : 0;
      matC[i][j] = (i == j) ? 4 : 0;
    }
  }
  for (i = 0; i < nbL; i++){
    for (j = 0; j < nbC; j++) printf("[%d] ", matA[i][j]);
    printf("\n");
}
Merci beaucoup par avance pour votre aide !!