Renverser un tableau : erreur de segmentation

Résolu
cosni - Modifié le 9 oct. 2023 à 16:33
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 23 août 2023 à 17:26

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

Whismeril Messages postés 19030 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 avril 2024 931
Modifié le 23 août 2023 à 17:22

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
PierrotLeFou
11 août 2023 à 01:21

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
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
Modifié le 23 août 2023 à 17:27

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