Renverser un tableau : erreur de segmentation

Résolu
cosni -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -

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. Utilisateur anonyme
     

    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
  2. PierrotLeFou
     

    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
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     

    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