我已经将一个c++代码编译成MEX文件,但是在调用这个MEX文件时,它会崩溃.在MATLAB中给出了以下错误消息:
检测到分割违规
我尝试在C++文件中使用try-catch来打印catch块中的消息,例如,
try {
//my code;
}
catch(std::exception &e)
{
mexPrintf(e.what());
mexEvalString("drawnow;");
return;
}但是打印消息不起作用,代码仍然崩溃。
在查看Google时,大部分时间它都指向MathWorks:螺纹/25900给出的某种形式的消息。
它指示设置环境变量"MATLAB_MEM_MGR=debug",但它没有解释如何使用它?有人能解释一下吗?
发布于 2011-06-01 18:01:16
首先,“尝试/捕捉”不会捕获分段违规。它只捕获C++异常,而不捕获像sigsegv这样的信号。
第二,“使用”MATLAB_MEM_MGR
MATLAB_MEM_MGR设置为OS中的“调试”(类似于Windows上的命令提示符或Unix上的终端),正如FAQ的Q3.5所说,如果MEX函数通过(例如)写过MATLAB分配的内存块结束时破坏内存,那么MATLAB将在释放内存块时报告损坏情况。
您可能想尝试在调试器下运行MEX-函数。这张技术报告有几个链接描述了如何在不同的平台上这样做。
编辑:前面的链接已经死了,这是最新的doc页面。
发布于 2015-06-23 22:03:44
删除mexEvalString("drawnow;")。我花了5个小时才弄明白。
https://stackoverflow.com/questions/6195284
复制相似问题