Renverser un tableau : erreur de segmentation

Résolu

Bonjour,

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

  1. 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
     


    1
    1. 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 ...

      0
      1. Modérateur

        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

        0