Char** conditional jump or move depends on uninitialised value

Résolu/Fermé
Xtazy78 - Modifié par Xtazy78 le 21/11/2012 à 03:30
 Xtazy78 - 21 nov. 2012 à 21:02
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 *
A voir également:

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

Utilise du char* plutot que du char** !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0
man netiquette deja

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