问题描述
|
我已经将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\"
,
但是它没有说明如何使用它?谁能解释一下吗?
解决方法
首先,try / catch不会捕获分段违规。它仅捕获C ++异常,而不捕获sigsegv之类的信号。
第二,“使用”use2ѭ:
在OS Shell中将环境变量
MATLAB_MEM_MGR
设置为\“ debug \”(例如Windows上的Command提示符或Unix上的终端),
从同一外壳运行MATLAB,
通常从该MATLAB运行MEX函数。
正如FAQ的Q3.5所述,如果MEX函数通过(例如)在MATLAB分配的内存块的末尾写入来破坏内存,则释放内存块时,MATLAB将报告损坏。
您可能想尝试在调试器下运行MEX函数。该技术说明具有几个链接,描述了如何在各种平台上执行此操作。
编辑:以前的链接已死,这是最新的文档页面。
, 取下mexEvalString(\"drawnow;\")
。我花了五个小时才弄清楚这一点。