#1 Le 11/04/2020, à 12:12
- zephyre123
Erreur de segmentation trie par valeur minimal [RESOLU]
Bonjour,
J'essaye de trier un tableau dans l'ordre croissant.
Cependant j'ai le message d'erreur suivant erreur de segmentation et je n'ai aucune aide pour pouvoir la résoudre de la part du compilateur gcc.
Je vous mets le code ci dessous ;
// On definis un nouveau tableau et on l'initialise
int tableau2[5] = {-1, 2, -6, 10, 15};
// On affiche le tableau initialisé
for(int i = 0; i < 5; i++)
printf("%d ", tableau2[i]);
// On saute une ligne
printf("\n");
// On trie le tableau dans l'ordre croissant
int minimum, indice_minimum;
for(int i = 0; i < 5; i++)
{
// On sauvegarde la premiere valeur du tableau en disant que c'est le minimum
minimum = tableau2[i];
for(int j = i + 1; j < 5; j++)
{
if (tableau2[j] < minimum)
{
minimum = tableau2[j];
indice_minimum = j;
}
int tmp;
tmp = tableau2[i];
tableau2[i] = tableau2[indice_minimum];
tableau2[indice_minimum] = tmp;
}
}
// On affiche le tableau une fois trié
for(int i = 0; i < 5; i++)
printf("%d ", tableau2[i]);
printf("\n");
Dernière modification par zephyre123 (Le 11/04/2020, à 14:18)
Hors ligne
#2 Le 11/04/2020, à 12:32
- pingouinux
Re : Erreur de segmentation trie par valeur minimal [RESOLU]
Bonjour,
Si tu veux de l'aide, donne au moins un programme qui compile…
Hors ligne
#3 Le 11/04/2020, à 12:37
- zephyre123
Re : Erreur de segmentation trie par valeur minimal [RESOLU]
salut pinguouinux,
Ce programme compile mais il ne trie pas toutes les valeurs du tableau.
Je ne comprends pas pourquoi ?
Pouvez vous m'expliquer à croire que j'ai tapé un code je ne comprends même pas ce qu'il fait.
// On definis un nouveau tableau et on l'initialise
int tableau2[5] = {-1, 2, -6, 10, 15};
// On affiche le tableau initialisé
for(int i = 0; i < 5; i++)
printf("%d ", tableau2[i]);
// On saute une ligne
printf("\n");
// On trie le tableau dans l'ordre croissant
int minimum, indice_minimum;
for(int i = 0; i < 5; i++)
{
// On sauvegarde la premiere valeur du tableau en disant que c'est le minimum
minimum = tableau2[i];
for(int j = i + 1; j < 5; j++)
{
if (tableau2[j] < minimum)
{
minimum = tableau2[j];
indice_minimum = j;
}
}
int tmp;
tmp = tableau2[i];
tableau2[i] = tableau2[indice_minimum];
tableau2[indice_minimum] = tmp;
}
// On affiche le tableau une fois trié
for(int i = 0; i < 5; i++)
printf("%d ", tableau2[i]);
printf("\n");
return(0);
Hors ligne
#4 Le 11/04/2020, à 13:06
- kamaris
Re : Erreur de segmentation trie par valeur minimal [RESOLU]
Que se passe-t-il pour indice_minimum si on ne rentre pas dans le test de la boucle en j ?
Hors ligne
#5 Le 11/04/2020, à 13:41
- zephyre123
Re : Erreur de segmentation trie par valeur minimal [RESOLU]
Kamaris je ne comprends pas ta question on est obligé de rentrer dans la boucle d'indice j.
Si on ne rentre pas dans la boucle d'indice j alors la valeur d'indice minimum est non définis.
je vais initialiser indice_minimum dans mon code je vais voir ce que ça va faire.
Dernière modification par zephyre123 (Le 11/04/2020, à 13:42)
Hors ligne
#6 Le 11/04/2020, à 13:48
- zephyre123
Re : Erreur de segmentation trie par valeur minimal [RESOLU]
j'ai initialiser la valeur de indice minimum dans ma boucle i voir le code ci dessous :
// On definis un nouveau tableau et on l'initialise
int tableau2[5] = {-1, 2, -6, 10, 15};
// On affiche le tableau initialisé
for(int i = 0; i < 5; i++)
printf("%d ", tableau2[i]);
// On saute une ligne
printf("\n");
// On trie le tableau dans l'ordre croissant
int minimum, indice_minimum;
for(int i = 0; i < 5; i++)
{
// On sauvegarde la premiere valeur du tableau en disant que c'est le minimum
minimum = tableau2[i];
indice_minimum = i;
for(int j = i + 1; j < 5; j++)
{
if (tableau2[j] < minimum)
{
minimum = tableau2[j];
indice_minimum = j;
}
}
int tmp;
tmp = tableau2[i];
tableau2[i] = tableau2[indice_minimum];
tableau2[indice_minimum] = tmp;
}
// On affiche le tableau une fois trié
for(int i = 0; i < 5; i++)
printf("%d ", tableau2[i]);
printf("\n");
ça fonctionne maintenant le tableau est bien trié mais je ne comprends pas pourquoi es ce que tu as une explication Kamaris car pour moi on est obligé de rentrer dans la boucle d'indice j
et indice_minimum est initialisé à ce moment.
Hors ligne
#7 Le 11/04/2020, à 14:17
- zephyre123
Re : Erreur de segmentation trie par valeur minimal [RESOLU]
Kamaris j'ai compris si on initialise pas la valeur de indice minimal dans la boucle i alors la valeur de indice minimal est aléatoire et on ne sait pas ou on commence à rechercher le minimum dans la boucle j.
J'ai compris et j'ai trouvé les explications tout seul.
Merci encore Kamaris.
Hors ligne
#8 Le 11/04/2020, à 15:07
- kamaris
Re : Erreur de segmentation trie par valeur minimal [RESOLU]
Non, ici indice_minimum n'aura pas une valeur aléatoire, car on rentre dans le test de la boucle en j pour i = 0, puis à nouveau pour i = 1, i = 2, et après on n'y rentre plus.
Donc indice_minimum garde ensuite sa dernière valeur prise : 2.
Pour remédier à ça, il faut effectivement initialiser indice_minimum en même temps qu'on initialise minimum, avant la boucle en j.
Pour y voir clair dans tout ça, tu peux tracer la valeur de tes variables au cours de l'exécution du programme, avec un printf dans la boucle en j.
Remarque : si on n'était pas rentré dans le test pour i = 0, alors indice_minimum aurait pu avoir une valeur aléatoire, à condition que ton code se trouve dans une fonction (autre que la fonction principale).
Si le code se trouve directement dans main(), alors indice_minimum est initialisé à 0.
Hors ligne