【发布时间】:2013-02-27 01:53:57
【问题描述】:
我在 MATLAB 中编写了以下代码:
#include <string.h>
#include <stdlib.h>
#include "mex.h"
#include "matrix.h"
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[]){
double* x = (double*)malloc(5 * sizeof(*x));
int k;
for(k=0;k<5;k++)
x[k] = k;
mxArray* p1 = mxCreateDoubleMatrix(5, 1, mxREAL);
mxSetPr(p1, x);
}
我在没有输入或输出的情况下调用该函数。除了初始化一些向量之外,代码实际上什么都不做。我知道代码有严重的内存泄漏,但除了内存泄漏,当我调用函数时,MATLAB 会关闭。
如果我将malloc 替换为mxMalloc,代码将毫无问题地执行。
我知道最好使用 mx* 来分配内存,但我确信 malloc 和 calloc 以及 free 可以毫无问题地在 MEX 中使用。
我也删除了 (double*),但它仍然崩溃。
如果让我知道为什么提到的代码会导致 MATLAB 崩溃,我们将不胜感激。 谢谢
【问题讨论】:
-
对我来说不会崩溃,不过我在使用 64 位 matlab (R2011a) 的 linux 上
-
我正在使用带有 R2009b MATLAB 的 Linux Ubuntu 12.10 32 位。看来,问题出在我系统的某个地方。
-
我不明白为什么人们继续使用旧版本的 matlab...
-
@slayton,这是因为它是唯一可以在我的 Windows 98 机器上运行的机器 :-)
-
@paxdiablo,哈哈,安装 Linux