mex文件崩溃,如何在MATLAB中使用MATLAB_MEM_MGR

mex file is crashing, how to use MATLAB_MEM_MGR in matlab?

本文关键字:MATLAB MGR MEM 崩溃 文件 mex      更新时间:2023-10-16

我已经编译了一个c++代码到MEX文件,但在调用这个MEX文件时,它崩溃了。它在MATLAB中给出以下错误消息:

检测到分段违规

我尝试在C++文件中使用try-catch来打印catch块中的消息比如

try {
    //my code;
}
catch(std::exception &e)
{
    mexPrintf(e.what());
    mexEvalString("drawnow;");
    return;
}

但是打印消息不起作用,代码仍然崩溃。

看看谷歌,大多数时候它都指向MathWorks给出的某种形式的信息:http://www.mathworks.de/matlabcentral/newsreader/view_thread/25900

其指示设置环境变量CCD_ 1,但它没有解释如何使用它?有人能解释一下吗?

首先,try/catch不会捕获分段冲突。它只捕获C++异常,而不是像sigsegov这样的信号。

第二,"使用"MATLAB_MEM_MGR:

  1. 在操作系统外壳中将环境变量MATLAB_MEM_MGR设置为"debug"(如Windows上的命令提示符或Unix上的终端)
  2. 从同一个shell运行MATLAB
  3. 从MATLAB中正常运行MEX函数

正如常见问题解答的Q3.5所说,如果MEX函数通过(例如)写入超过MATLAB分配的内存块的末尾而损坏内存,则MATLAB将在释放内存块时报告损坏情况。

您可能需要尝试在调试器下运行MEX函数。这篇技术说明有几个链接,描述了如何在各种平台上做到这一点。

编辑:上一个链接已失效,这是最新的文档页面。

删除mexEvalString("drawnow;")。我花了5个小时才弄明白。