Renverser un tableau : erreur de segmentation

Résolu
cosni -  
mamiemando Messages postés 33769 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

A voir également:

3 réponses

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

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