Char** conditional jump or move depends on uninitialised value
Résolu
Xtazy78
-
Xtazy78 -
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.
PS : Je veux utiliser un char ** et non pas un char *
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:
- Char** conditional jump or move depends on uninitialised value
- Doodle jump - Télécharger - Arcade
- Move mouse - Télécharger - Utilitaires
- Livre d'or hiwit - Forum Webmastering
- X64 or x86 ✓ - Forum Windows
- Ruée vers l'or - Guide
9 réponses
Bonjour
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é) :
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;
}
Xtazy78
Merci :)
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);
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question