mex文件崩溃了,如何在matlab中使用MATLAB_MEM_MGR?

问题描述

| 我已经将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;\")
。我花了五个小时才弄清楚这一点。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...