我已经将一个c ++代码编译成了MEX文件,但在调用这个MEX文件时,它崩溃了。 它在MATLAB中给出以下错误消息:
检测到分段违规
我尝试在C ++文件中使用try-catch在catch块中打印消息 等,
try {
//my code;
}
catch(std::exception &e)
{
mexPrintf(e.what());
mexEvalString("drawnow;");
return;
}
但是打印消息不起作用,代码仍然崩溃。
在查看Google时,大部分时间它指向MathWorks提供的某种形式的消息:http://www.mathworks.de/matlabcentral/newsreader/view_thread/25900
指示设置环境变量"MATLAB_MEM_MGR=debug"
,
但它没有解释如何使用它?有人可以解释一下吗?
答案 0 :(得分:4)
首先,try / catch不会捕获分段违规。它只捕获C ++异常,而不是像sigsegv这样的信号。
其次,要“使用”MATLAB_MEM_MGR
:
MATLAB_MEM_MGR
为“debug”(如Windows上的命令提示符或Unix上的终端),如FAQ的Q3.5所述,如果MEX函数通过(例如)写入MATLAB分配的内存块的末尾来破坏内存,MATLAB将报告内存块的损坏情况。释放。
您可能希望尝试在调试器下运行MEX功能。 This tech note有几个链接描述了如何在各种平台上这样做。
编辑:上一个链接已死,这是最新的doc page。
答案 1 :(得分:0)
删除mexEvalString("drawnow;")
。我花了5个小时才弄清楚这一点。