Bonjour,

Suite à cette discussion, http://www.developpez.net/forums/d85...-regdeletekey/ , je dois allouer dynamiquement un tableau de type char à deux dimensions pour y stocker X chaînes de caractères.

J'ai donc créé une fonction pour le faire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char **AllocateMemoryForBuffer(int lignes, int colonnes)
{
  char **TabRes2d;
  int i;
 
  TabRes2d = malloc((lignes+1)*(sizeof(char)));
  for (i = 0; i < colonnes+1; i++)
    TabRes2d[i] = malloc((colonnes+1)*(sizeof(char)));
 
  printf("\nlignes = %d\n", lignes+1);
  printf("colonnes = %d\n\n", colonnes+1);
 
  return (TabRes2d);
}
Les 'lignes+1' et 'colonnes+1' répondent au besoin de mon programme : je dois augmenter de 1 'lignes' et de 1 'colonnes'.

Déjà, j'aimerais savoir si mon allocation de tableau est correcte ou pas.

Le problème survient lors du remplissage du tableau : j'arrive à remplir les 5, 6 premières lignes, puis ça plante sur la septième. L'errorlevel de mon programme est -1073741819.

Le tableau 2D type char est défini dans une structure. J'alloue la mémoire comme ceci :

ptr_registre->TabOfSubkeysToDelete = AllocateMemoryForBuffer(ptr_registre->NbrSuKeys, ptr_registre->MaxSubKeySize);
La structure :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
struct      s_registre
{
    ..............
    char **TabOfSubkeysToDelete;
};
 
struct      s_registre t_registre;
struct      s_registre *ptr_registre;
ptr_registre = &t_registre;
J'envoie un pointeur vers cette structure à la fonction chargée de remplir ce tableau et voici le code de remplissage ci-dessous :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
    while (a < strlen(path_key))
      {
        ptr_registre->TabOfSubkeysToDelete[count][a] = path_key[a];
        a++;
      }
    ptr_registre->TabOfSubkeysToDelete[count][a] = '\0';
Et count est incrémenté de 1 à chaque fois, dès qu'on lit une autre clé.

Le remplissage du tableau commence bien mais plante à ptr_registre->TabOfSubkeysToDelete[6]. Si je n'incrémente pas count, c'est la première ligne qui est remplie à chaque fois, et là le programme plante lors du douzième remplissage, même erreur.

Ca fait bien 3h que je suis sur le problème, j'ai beau repartir à 0 niveau code, je retombe sur le même erreur : j'en déduis que je me suis bien planté quelque part.

Merci par avance de votre aide pour m'aider à trouver.