Salut à tous !

J'ai vu mardi, l'allocation dynamique multiple et depuis je patauge dans la semoule... Cependant en travaillant sur le sujet, j'ai l'impression que ça va mieux ! Par exemple dans le code suivant j'ai réussi à remplir une matrice ! Mais le programme plante... Voici la bête
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
double** create_matrix(int I, int J){
    double** matrix = calloc(sizeof(double*),I);
    int i;for(i=0;i<I;i++){
        matrix[i] = calloc(sizeof(double),J);
    }
    return matrix;
}
 
void free_matrix(double **m, int I){
    int i;for(i=0;i<I;i++){free(m[i]);}
    free(m);
}
 
void fill_matrix(double **m, int I, int J){
    srand(time(NULL));
    int i,j;for(i=0;i<I;i++){
        for(j=0;j<J;j++){
            m[i][j]=rand()%(I*J);
        }
    }
}
 
void print_matrix(double **m, int I, int J){
    int i,j;for(i=0;i<I;i++){
        for(j=0;j<J;j++){printf("%.2lf | ",m[i][j]);}
        printf("\n");
    }
}
Et maintenant voici ce que j'ai compris : Je crée un tableau de I tableau(x) de double contenant J double(s) ainsi pour accéder au tableau 1 de J double(s) je peux demander matrix[1] et pour accéder à la case 1 du tableau 1 je peux demander matrix[1][1].

Enfin voici jusqu'à où le programme déroule avant de planter : Il déroule jusqu'à l'affiche de ma deuxième matrice.
Voici mon main :
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
    int i, j, k;
    int dimA = 4;
    int dimB [] = {4,5};
    int dimId = 4;
    double **A;
    double **B;
    double **C;
    double **Id;
 
    printf("Création de A et B\n");
    A = create_matrix(dimA, dimA);
    B = create_matrix(dimB[0], dimB[1]);
    printf("\n");
 
    printf("Suppression de A et B\n");
    free_matrix(A, dimA);
    free_matrix(B, dimB[0]);
    printf("\n");
 
    printf("Création de A et B\n");
    A = create_matrix(dimA, dimA);
    B = create_matrix(dimB[0], dimB[1]);
    printf("\n");
 
    printf("Remplissage de A et B\n");
    fill_matrix(A, dimA, dimA);
    fill_matrix(B, dimB[0], dimB[1]);
    printf("\n");
 
    printf("Affichage de A et B\n");
    print_matrix(A, dimA, dimA);
    printf("\n");
    print_matrix(B, dimB[0], dimB[1]);
    printf("\n");
 
    printf("Création et affichage d'une matrice identité %dx%d\n", dimId, dimId);
Qu'en dites-vous ? Pouvez vous m'expliquer où sont mes erreurs que j'essaye d'apprendre ! J'espère arriver à comprendre cette nouvelle technique ce serait génial .