首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mex文件崩溃了,如何在matlab中使用MATLAB_MEM_MGR?

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

Stack Overflow用户
提问于 2011-06-01 01:18:30
回答 2查看 2.2K关注 0票数 5

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

检测到分割违规

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

代码语言:javascript
复制
try {
    //my code;
}
catch(std::exception &e)
{
    mexPrintf(e.what());
    mexEvalString("drawnow;");
    return;
}

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

在查看Google时,大部分时间它都指向MathWorks:螺纹/25900给出的某种形式的消息。

它指示设置环境变量"MATLAB_MEM_MGR=debug",但它没有解释如何使用它?有人能解释一下吗?

EN

回答 2

Stack Overflow用户

发布于 2011-06-01 18:01:16

首先,“尝试/捕捉”不会捕获分段违规。它只捕获C++异常,而不捕获像sigsegv这样的信号。

第二,“使用”MATLAB_MEM_MGR

  1. 将环境变量MATLAB_MEM_MGR设置为OS中的“调试”(类似于Windows上的命令提示符或Unix上的终端),
  2. 从同一个外壳运行MATLAB,
  3. 从MATLAB上正常运行你的MEX-函数。

正如FAQ的Q3.5所说,如果MEX函数通过(例如)写过MATLAB分配的内存块结束时破坏内存,那么MATLAB将在释放内存块时报告损坏情况。

您可能想尝试在调试器下运行MEX-函数。这张技术报告有几个链接描述了如何在不同的平台上这样做。

编辑:前面的链接已经死了,这是最新的doc页面

票数 4
EN

Stack Overflow用户

发布于 2015-06-23 22:03:44

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6195284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档