Char** conditional jump or move depends on uninitialised value

Résolu
Bonsoir,

Je vous explique mon probleme :

J'ai une fonction qui utilise un char **alphabet cependant valgrind me met une erreur de contexte comme quoi alphabet n'est pas initialise.
char **alphabet = malloc(sizeof (char) * 100); 
int i = 26; 
int nb = 0; 

while (i >= 0) 
{ 
    alphabet[nb][0] = 'a' + nb; 
    nb++; 
    i--; 
} 


PS : Je veux utiliser un char ** et non pas un char *

9 réponses

  1. Je t'ai pas mis les includes

    void free_alphabet(char **alph)
    {
       int i = 0;
       while (alph[i] != NULL)
       {
           free(alph[i]);
           i++;
       }
       free(alph);
    }
    


    int main (void)
    {
    char **alphabet = malloc(sizeof (char) * 100); 
    int i = 26; 
    int nb = 0; 
    
    while (i >= 0) 
    { 
        alphabet[nb][0] = 'a' + nb; 
        nb++; 
        i--; 
    } 
    
    free_alphabet(alphabet);
    
    return (0);
    }
    
    1. Le code est pas trop complet......

      Utilise du char* plutot que du char** !!
      1. Mec mon but etait d'utiliser un char**...

        Il suffit juste d'utiliser calloc mon pote !

        man calloc si tu veux, mais en gros c'est un malloc plus des allocations sur chaque case memoire reservee.

        Bisous
        1. Bonjour

          char **alphabet = malloc(sizeof (char) * 100); 

          C'est très mal parti...
          Tu te bases sur la taille d'un simple char pour initialiser alphabet, alors qu'alphabet va pointer sur des pointeurs ...
          Ce sont alphabet[0], alphabet[1].. qui vont pointer sur des caractères

          Quand tu utilises un char **, ta variable ne pointe pas sur un tableau à 2 dimensions.
          Elle pointe sur un tableau de pointeurs qu'il faut allouer et initialiser
          Ensuite, chacun de ces pointeurs est un char * classique (qu'il faut aussi allouer et initialiser)

          pour initialiser (pas testé) :
          #define NBCHAINES 26  
          #define NBCARACTERES 10  
          char **alphabet = malloc(sizeof (char *) * NBCHAINES);   
          int k;  
          for (k=0; k<NBCHAINES; k++) {  
            alphabet[k]=malloc(sizeof(char) * NBCARACTERES);  
            alphabet[k][0]='a'+k;  
          }