Renverser un tableau : erreur de segmentation
RésoluBonjour,
J'ai fait ce code pour avoir une fonction qui inverse l’ordre des élements d’un tableau d’entiers.
#include <unistd.h>
void ft_rev_int_tab(int *tab, int size)
{
int c;
int i;
i = 0;
while (i < size / 2)
{
c = tab[i];
i = tab[size - 1 - i];
tab[size - 1 - i] = c;
i++;
}
}
int main()
{
int p;
int s;
p = 5;
s = 3;
ft_rev_int_tab(&p,s);
write (1, &p, 1);
return 0;
}
Pourtant, j'ai ce message d'erreur et je comprends ce que je dois faire pour résoudre ce problème :
- [1] + 5608 suspended cat
- [1] 5252 segmentation fault ./a.out
Pouvez-vous m'aider svp? Merciii
Macintosh / Safari 13.1.3
3 réponses
-
Bonjour
Pour tes prochains messages, merci d'utiliser la coloration syntaxique comme décrit ici
Pour ton problème, ta fonction attend un tableau de int. Tu ne lui donnes pas
-
Ce n'est pas le seul problème. Ta façon d'interchanger deux valeurs n'est pas correcte. La variable i a un double usage ...
-
Bonjour,
Comme le dit fort justement Pierrot dans son message #2, ta variable i a un double rôle :
- tantôt l'un des deux index où la permutation est faite,
- tantôt une valeur du tableau (qui dans le cas général est en dehors de la plage d'indices valide du tableau, et conduit donc à une erreur de segmentation).
De plus, ta manière de déclarer ton tableau est un peu alambiquée.
Pour résoudre tous ces problèmes, tu pourrais t'inspirer de ce lien.
Bonne chance