C++ mex文件正在崩溃,如何在MATLAB中使用MATLAB_MEM_MGR?

C++ mex文件正在崩溃,如何在MATLAB中使用MATLAB_MEM_MGR?,c++,matlab,debugging,crash,mex,C++,Matlab,Debugging,Crash,Mex,我已经编译了一个C++代码到MEX文件,但是调用这个MEX文件时,它崩溃了。 它在MATLAB中给出以下错误消息: 检测到分段冲突 我尝试使用TestCcatch in C++文件在catch块中打印消息 像 但是打印消息不起作用,代码仍然崩溃 看看谷歌,大多数时候它都指向MathWorks给出的某种形式的信息: 指示设置环境变量“MATLAB\u MEM\u MGR=debug”, 但它没有解释如何使用它?有人能解释一下吗?首先,try/catch不会捕获分段冲突。它只捕获C++异常,而不是像

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

检测到分段冲突

我尝试使用TestCcatch in C++文件在catch块中打印消息 像

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

看看谷歌,大多数时候它都指向MathWorks给出的某种形式的信息:

指示设置环境变量“MATLAB\u MEM\u MGR=debug”,
但它没有解释如何使用它?有人能解释一下吗?

首先,try/catch不会捕获分段冲突。它只捕获C++异常,而不是像SIGSEVV这样的信号。p> 第二,要“使用”
MATLAB\u MEM\u MGR

  • 在操作系统外壳(如Windows上的命令提示符或Unix上的终端)中,将环境变量
    MATLAB_MEM_MGR
    设置为“debug”
  • 从同一个shell运行MATLAB
  • 从MATLAB中正常运行MEX函数
  • 如常见问题所述,如果MEX函数通过(例如)写入MATLAB分配的内存块的末尾而损坏内存,则释放内存块时,MATLAB将报告损坏

    您可能希望尝试在调试器下运行MEX函数。有几个链接描述如何在各种平台上执行此操作


    编辑:上一个链接已失效,下面是最新的链接。

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

    嗨,我可以解决这个问题。我因为输入格式错误而崩溃,错误的格式导致Device by zero。在发布此消息之前,我曾尝试使用cpp调试代码,但无法捕获它。正如我提到的,我试着使用try-catch、printing等,但没有任何帮助。此外,我从未想过崩溃可能是由devide by zero造成的,所以我所做的一切都是为了看看我是否正在尝试访问额外的内存。无论如何,谢谢。
    try {
        //my code;
    }
    catch(std::exception &e)
    {
        mexPrintf(e.what());
        mexEvalString("drawnow;");
        return;
    }