J'essaie d'écrire un algorithme qui trie les éléments d'une liste dans un ordre croissant (tri d'insertion). Je démarre la fonction principale en définissant toutes les variables (et tableaux) suivantes comme int. Voici la fonction de tri:Erreur de segmentation dans insertion-tri en C
void sort(int a, int b , int list[], int i)
{
for(i=1; i<(b); i++)
{
while(list[i-1]>list[i])
{
a = list[i-1];
list[i-1]=list[i];
list[i]=a;
i--;
}
}
}
b étant le nombre d'éléments dans la liste, et un être initialisé à 0 en principale. Quand j'utilise la fonction principale avec une table d'entiers positifs dans la fonction principale, elle les trie de la manière désirée. Cependant, si certaines valeurs sont négatives, le programme génère une erreur de segmentation.
Quelqu'un pourrait m'aider à comprendre l'erreur? Je vous remercie!
Une erreur de segmentation signifie presque sûrement que vous accédez à de la mémoire qui ne vous appartient pas. Étudie ta boucle intérieure. Voyez-vous un moyen d'accéder 'list' via un index inférieur à 0 ou supérieur au nombre d'éléments moins un? –
C'est généralement une mauvaise idée de changer vous-même la valeur de 'i' dans la boucle for qui utilise' i' comme incrément de boucle. Lorsque vous décrémentez i la première fois dans la boucle while, il devient 0, puis vous essayez d'accéder 'list [-1]' – bruceg
@bruceg Debatable (je le fais souvent quand j'écris des parsers pour passer des caractères), mais dans ce cas est certainement. – YoYoYonnY