es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué esta función fgets me está dando un error de segmentación?

Esta función que sigue termina y da como resultado un fallo de segmentación en la instrucción fgets y no tengo ni idea de por qué:

const char* display_exp(FILE* fp){

<pre><code>char maxstr[50];
char* temp;
char* exp;
fgets(maxstr,sizeof(maxstr),fp);

exp = (char*)calloc(strlen(maxstr),sizeof(char));
temp=maxstr;

free(temp);

printf("%s",exp);

return exp;
</code></pre>

}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que la instrucción free(temp) está causando la violación de segmento.

    En esta función, temp se asigna a la dirección de maxstr, que es una variable local que se asigna automáticamente en la pila. La función free se utiliza para liberar la memoria dinámica que se asignó previamente en el montón usando malloc, calloc o realloc. Dado que temp apunta a una variable asignada en la pila (maxstr), intentar liberar esta memoria dará lugar a un comportamiento indefinido, incluyendo una violación de segmento.

    Para solucionar este problema, elimine la instrucción free(temp) de la función ya que no es necesaria. La variable exp es la única memoria que debe liberarse con free antes de que la función devuelva.

Comments are closed.