Chers Amis programmeurs Bonsoir !

Je suis des cours de programmation en langage C et je rencontre un problème lors de l'allocation mémoire de certaine de mes variables.

Je vais d'abord exposer le code avant de dire ce qu'il est censé faire et ou se trouve mon problème car peut être que ce qui ne me saute pas au yeux sautera aux vôtres !

J'utilise GNU GCC Compiler
Ceci est mon fichier.c
Code C : 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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include "functions.h"
#include "voidFun.h"
#include "voidFun2.h"
#include "void25.h"
#include "time.h"
#define MYSTMAX 100
#define MYSTMIN 0
 
void tab2DTri()
{
    int i, j, k= 0, n, m, buff;
    int **tab2D = malloc(n*sizeof(int*));
    int **tab2Tri = malloc(n*sizeof(int*));
    int *tab1Tri = malloc((n*sizeof(int)*(m*sizeof(int))));
 
    srand(time(NULL));
    printf("Veuillez definir les dimensions du tableau a 2 dim\n");
    printf("Nombre de Lignes (max 10)?  ");
    scanf("%d", &n);
    printf("\nNombre de Colonnes (max 10)?  ");
    scanf("%d", &m);
    printf("\n");
 
 
    for (i = 0; i < n; i ++)
    {
        tab2D[i] = malloc(m*sizeof(int));
 
    }
    for (i = 0; i < n; i ++)
    {
        tab2Tri[i] = malloc(m*sizeof(int));
 
    }
 
 
    for (i = 0; i < n; i ++)
    {
        for (j = 0; j < m; j ++)
        {
            tab2D[i][j] = rand()%(100 + 0 + 1) + 0;
        }
    }
    printf("\nVoici le tableau generer aleatoirement\n");
    affiche2D(tab2D,n,m);
 
    for (i = 0; i < n; i ++)
    {
        for (j = 0; j < m; j ++)
        {
            tab1Tri[k] = tab2D[i][j];
            k++;
        }
    }
 
    for (i = 0; i < n*m; i ++)
    {
        for (j = 0 ; j < n*m - 1 - i; j ++)
        {
            if (tab1Tri[j+1] < tab1Tri[j])
            {
                buff = tab1Tri[j];
                tab1Tri[j] = tab1Tri[j+1];
                tab1Tri[j+1] = buff;
            }
        }
    }
    k = 0;
    for (i = 0; i < n; i ++)
    {
        for (j = 0; j< m; j ++)
        {
            tab2Tri[i][j] = tab1Tri[k];
            k ++;
        }
    }
    printf("Voici maintenant le moment que vous attendiez tous, le tableau trier !\n");
    affiche2D(tab2Tri,n, m);
    free(tab2D);
    free(tab2Tri);
    free(tab1Tri);
 
}
 
void affiche2D(int **tab,int n,int m)
{
 
    int i, j;
    for (i = 0; i < n; i ++)
    {
        for (j = 0; j < m; j ++)
        {
            printf("%3d", tab[i][j]);
        }
        printf("\n");
    }
    printf("\n\n");
 
}

Lorsque j'utilise le debug de CodeBlock, je me rend compte que lorsque le programme exécute l'initialisation des variables (pointeurs dans mon cas), il n'alloue pas d'adresse mémoire à Tab2Tri et parfois à Tab1Tri. Ce qui à pour influence que le programme ne réponde plus.Le problème arrive au niveau de ma boucle qui est censé alloué des adresses mémoire aux pointeurs dans Tab2Tri.

Bizarrement le programme a déjà fonctionner. Ce qui veut dire , même si je ne prend peut être pas la méthode la plus facile, que le fond du code est bon.

C'est un exercice ou je dois générer un tableau à deux dimension d'entiers aléatoires et ensuite les trier.

J'espère que quelqu'un saura m'aider !
Merci d'avance et bonne soirée à tous et à toutes !!!