Erreur de segmentation (Inconnue)
Bonjour,
Je voudrais savoir d'ou peut venir mon erreur de segmentation dans le code suivant :
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
| #include <stdio.h>
const int OUT_MAX_SIZE = 1000000;
int main ()
{
short line_in[OUT_MAX_SIZE];
short line_out[OUT_MAX_SIZE];
short cur_line;
int cur_car;
int nb_of_car = 0;
int out_cur_car;
line_in[0] = 1;
for (cur_line = 0; 1; cur_line++)
{
printf ("[%i]", cur_line);
for (cur_car = 0; cur_car <= sizeof (line_in); cur_car++)
{
if (line_in[cur_car] = 0)
{
break;
}
if (line_in[cur_car] = line_in[cur_car-1])
{
nb_of_car++;
}
else
{
line_out[out_cur_car] = nb_of_car;
printf ("%i", nb_of_car);
out_cur_car++;
line_out[out_cur_car] = line_in[cur_car];
printf ("%i", line_in[cur_car]);
out_cur_car++;
}
}
printf ("\n");
}
return (0);
} |
J'ai déjà cherché pdt pas mal de temps, mais impossible de trouver une reponse.
Merci d'avance,
Dark-Meteor
Re: Erreur de segmentation (Inconnue)
Citation:
Envoyé par Dark-Meteor
Je voudrais savoir d'ou peut venir mon erreur de segmentation dans le code suivant : <...>
Déjà, y'a ça...
Code:
1 2 3 4 5 6 7
|
main.c: In function `main_':
main.c:24: warning: comparison between signed and unsigned
main.c:26: warning: suggest parentheses around assignment used as truth value
main.c:31: warning: suggest parentheses around assignment used as truth value
main.c:16: warning: 'out_cur_car' might be used uninitialized in this function |
Déjà, on a plus de warnings, mais la défintion et la taille du tableau sont suspectes :
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
| #include <stdio.h>
#if 0
/* -ed- remplace les variables par des constantes. */
#define OUT_MAX_SIZE 1000000
#else
/* -ed- reduction de la taille : OK. */
#define OUT_MAX_SIZE 100000
#endif
int main ()
{
short line_in[OUT_MAX_SIZE];
short line_out[OUT_MAX_SIZE];
short cur_line;
/* -ed mis size_t au lieu de short */
size_t cur_car;
int nb_of_car = 0;
/* -ed- ajoute = 0 */
int out_cur_car = 0;
line_in[0] = 1;
for (cur_line = 0; 1; cur_line++)
{
printf ("[%i]", cur_line);
for (cur_car = 0; cur_car <= sizeof (line_in); cur_car++)
{
/* -ed- mis == au lieu de = */
if (line_in[cur_car] == 0)
{
break;
}
/* -ed- mis == au lieu de = */
if (line_in[cur_car] == line_in[cur_car-1])
{
nb_of_car++;
}
else
{
line_out[out_cur_car] = nb_of_car;
printf ("%i", nb_of_car);
out_cur_car++;
line_out[out_cur_car] = line_in[cur_car];
printf ("%i", line_in[cur_car]);
out_cur_car++;
}
}
printf ("\n");
}
return (0);
} |
On a plus le segfault. Celui-ci est du à la définition d'un tableau trop grand en mémoire automatique. Il faut utiliser la mémoire statique ou la mémoire allouée. (Je n'ai pas vérifié le reste du code).