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

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
PierrotLeFou
 

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

0
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