我正在为Windows和Unix编写一个跨平台的C++程序.在Window端,代码将编译并执行没有问题.在Unix方面,它会编译然而当我尝试运行它时,我得到一个分段错误.我最初的预感是指针存在问题.
找到并修复分段错误错误的好方法是什么?
我有一个非常简单的程序,如下所示,它从.mat文件中读取一个值(来自Matlab的数据文件)并打印出来.出于某种原因,我在退出main()后出现了段错误- 我可以运行gdb my_program并逐步完成整个方法,但是一旦main()完成,我就在Matlab相关库中输入一些方法(libmwfl.so,依赖于它libmat.so),这会抛出段错误.
我对C编程完全不熟悉,但有些读书我怀疑我要么以某种方式破坏堆栈或者两次调用一些析构函数.但是,我在代码中看不到任何内容 - 正如我所说,我可以毫无问题地使用调试器逐步完成代码.
我在这做错了什么?
#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;
}
Run Code Online (Sandbox Code Playgroud)