Invertir una tabla: error de segmentación

Resuelto
cosni -  
mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   -

Hola,

He hecho este código para tener una función que invierte el orden de los elementos de un array de enteros.

#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; }

Sin embargo, tengo este mensaje de error y no entiendo qué debo hacer para resolver este problema:

 - [1] + 5608 suspended cat - [1] 5252 segmentation fault ./a.out

¿Puedes ayudarme, por favor? ¡Gracias!

3 respuestas

  1. Usuario anónimo
     

    Hola
    Para tus próximos mensajes, gracias por usar la coloración sintáctica como se describe aquí

    Para tu problema, tu función espera un arreglo de enteros. No le estás dando eso


    Cuando era pequeño, el Mar Muerto solo estaba enfermo.
    George Burns

    1
  2. PierrotLeFou
     

    No es el único problema. Tu forma de intercambiar dos valores no es correcta. La variable i tiene un doble uso ...

    0
  3. mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   7 940
     

    Hola,

    Como dice muy acertadamente Pierrot en su mensaje #2, tu variable i tiene un doble papel:

    • en ocasiones uno de los dos índices donde se realiza la permutación,
    • en otras una valor del array (que en el caso general está fuera del rango de índices válidos del array, lo que conduce a un error de segmentación).

    Además, tu forma de declarar tu array es un poco enrevesada.

    Para resolver todos estos problemas, podrías inspirarte en este enlace.

    Buena suerte

    0