Violación de segmento con fopen y fgets

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
llantones
Mensajes: 11
Registrado: 04/06/2018 6:59 am

Violación de segmento con fopen y fgets

#1 Mensaje por llantones » 03/05/2019 9:29 am

Hola:
He acotado el error a solo este código:

Código: Seleccionar todo

#include <stdio.h>
char *fgets (char *, int, FILE *);

int main (int argc, char *argv[])
{
  FILE *f1, *f2;
  char *s;
  f1 = fopen (argv[1], "r");
  f2 = fopen (argv[2], "r");
   s = fgets (s, 100, f1);
}
Ejecuto el programa pasando como argumentos dos ficheros de texto y me da violación de segmento. si le quito la línea:

Código: Seleccionar todo

   s = fgets (s, 100, f1);
ya no ocurre el fallo.
Si, sin embargo, quito:

Código: Seleccionar todo

  f2 = fopen (argv[2], "r");
tampoco lo da.
¿Alguna idea?
Saludos

mollok
Mensajes: 467
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: Violación de segmento con fopen y fgets

#2 Mensaje por mollok » 03/05/2019 10:53 am

s es un puntero a quién sabe dónde pues está sin inicializar. Como fgets copia el contenido del archivo a la posición de tu puntero estás intentando modificar una memoria de la que no tienes permiso. Haz de s un array capaz de alojar la cadena que va a recibir o adquieres memoria con malloc antes de guardar nada en él. Si optas por la última opción recuerda liberarla.
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

llantones
Mensajes: 11
Registrado: 04/06/2018 6:59 am

Re: Violación de segmento con fopen y fgets

#3 Mensaje por llantones » 03/05/2019 12:01 pm

Gracias, era un puntero loco :-)

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 5 invitados