Char** conditional jump or move depends on uninitialised value [Résolu/Fermé]

Signaler
-
 Xtazy78 -
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

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;  
}  
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Poste tout ton code.
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);
}
Le code est pas trop complet......

Utilise du char* plutot que du char** !!
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
man netiquette deja

et je code calloc chaque matin, merci
Ca doit segfault :/
Tkt on s'appelle poto ;)