¿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>
}
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 demaxstr
, que es una variable local que se asigna automáticamente en la pila. La funciónfree
se utiliza para liberar la memoria dinámica que se asignó previamente en el montón usandomalloc
,calloc
orealloc
. Dado quetemp
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 variableexp
es la única memoria que debe liberarse confree
antes de que la función devuelva.