Problème d'erreur de segmentation
Bonjour à tous,
J'essaie de coder en C une fonction qui affiche de manière récursive les "mots" de "aaa....a" à "zzz...zz" (voir un peu plus car j'arrête l'incrémentation des char quand ils arrivent à 127 et non 123) en incrémentant chaque caractère au fur et à mesure.
Dans le cas où le mot fait 3 caractères, il n'y a pas de soucis mais dès que je passe à 4, l'exécution me sort une erreur de segmentation. Le code me sort bien tous les premiers mots mais arrive à cette erreur de manière variable sur des mots qui commencent généralement pas le caractère 'g'.
Ci-dessous le code pour le cas où la taille du mot est 4. Est-ce que quelqu'un voit ce qui ne va pas et sur quelle partie de la mémoire je peux avoir cette erreur?
Question subsidiaire : vous avez surement remarqué dans la fonction main la ligne "bla[taille] = '\0';" Lorsque je ne la mets pas et que j'affiche le mot bla via printf, j'obtiens 4 'a' et un caractère bizarre. Ce caractère disparait lorsque je fixe manuellement la fin du string via "bla[taille] = '\0';" Je ne comprends pas pourquoi j'ai besoin de ça. Une idée?
Merci à tous pour votre aide et vos réponses et je reste à votre disposition si vous avez besoin d'explications.
Cordialement
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
#include <stdio.h>
#include <string.h>
#define DEBUT_RECH 97
int defileMot(char* motADefiler, int colonne)
{
int tailleMot = strlen(motADefiler);
if(colonne >= tailleMot)
{
printf("erreur colonne\n");
return 1;
}
if(colonne == 0 && motADefiler[colonne] >=127)
{
printf("fin de la premiere colonne\n");
return 0;
}
if(colonne == tailleMot - 1)
{
if(motADefiler[colonne] >= 127)
{
motADefiler[colonne] = DEBUT_RECH;
motADefiler[colonne-1]++;
defileMot(motADefiler, colonne-1);
}
else
{
printf("%s\n", motADefiler);
motADefiler[colonne]++;
defileMot(motADefiler, colonne);
}
}
else
{
if(motADefiler[colonne] >= 127)
{
motADefiler[colonne] = DEBUT_RECH;
motADefiler[colonne-1]++;
defileMot(motADefiler, colonne-1);
}
else
{
defileMot(motADefiler, colonne+1);
}
}
return 2;
}
int main(void){
int taille = 4;
char bla[taille];
for(int i = 0; i < taille; i++)
{
bla[i] = DEBUT_RECH;
}
bla[taille] = '\0';
//printf("%s\n", bla);
defileMot(bla, 0);
} |