Tengo un programa muy simple, que se enumera a continuación, que lee un valor de un archivo .mat
(un archivo de datos de Matlab) y lo imprime. Por alguna razón, recibo un error segfault después de salir de main() - Puedo ejecutar gdb my_program
y recorrer todo el método, pero tan pronto como termina main()
, introduzco algún método en una biblioteca relacionada con Matlab (libmwfl.so
, una dependencia de libmat.so
) que lanza una segfault.Aparentemente estoy corrompiendo la pila, pero ¿cómo?
Soy completamente nuevo en la programación C, pero algunos leyendo sospecho que de alguna manera soy corrupting the stack o calling some destructor twice. Sin embargo, no puedo ver ninguno de esos en mi código, y como dije, puedo pasar por mi código con el depurador sin problemas.
¿Qué estoy haciendo mal aquí?
#include <stdlib.h>
#include <stdio.h>
#include <mat.h>
int main(int argc, char *argv[]) {
double value;
MATFile *datafile;
datafile = matOpen("test.mat", "r");
mxArray *mxv;
mxv = matGetVariable(datafile, "value");
value = *mxGetPr(mxv);
mxFree(mxv);
matClose(datafile);
printf("The value fetched from the .mat file was: %f", value);
return 0;
}
Si yo estuviera en tu lugar, me gustaría comprobar si archivo de datos es NULL (lo que significaría que el archivo no se pudo abrir). – Gtiou
@GeorgeStamatiou Mirando el programa, por un momento, incluso yo sentí lo mismo. Pero si ese fuera el caso, el programa se habría bloqueado (con toda probabilidad) dentro de 'main' debido a una referencia de puntero NULL y no después de salir' main' como lo indica el OP. La respuesta de Giuseppe Guerrini detectó el problema exacto –