【发布时间】:2012-08-31 12:05:25
【问题描述】:
我有一个非常简单的程序,如下所列,它从.mat 文件(来自Matlab 的数据文件)中读取一个值并打印出来。出于某种原因,退出 main() 后出现段错误错误 - 我可以运行 gdb my_program 并逐步执行整个方法,但一旦 main() 完成,我会在Matlab 相关库(libmwfl.so,libmat.so 的依赖项)会引发段错误。
我对 C 编程完全陌生,但有些阅读我怀疑我是 corrupting the stack 或 calling some destructor twice。但是,我在我的代码中看不到任何这些 - 正如我所说,我可以毫无问题地使用调试器单步执行我的代码。
我在这里做错了什么?
#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;
}
【问题讨论】:
-
如果我站在你的立场上,我会检查数据文件是否为 NULL(这意味着文件无法打开)。
-
@GeorgeStamatiou 看了程序,一时间,连我自己也有同感。但如果是这种情况,程序将(很可能)在
main内崩溃,因为 NULL 指针取消引用,而不是在退出main之后,如 OP 所示。 Giuseppe Guerrini 的回答发现了确切的问题
标签: c matlab segmentation-fault