我正在将我的C ++程序翻译成MEX文件。我正在使用Matlab编辑器并从Matlab命令窗口进行编译。我的Matlab版本是win64,编译器是minGW-w64。我的文件结构如下:
void mexFunction(int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[])
{
RandomWalkMH_mex();
}
其中RandomWalkMH_mex()
相当于原始C ++程序中的main()
,并调用所有其他函数。
文件运行正常,直到我在函数RandomWalkMH_mex()
中声明动态2D数组。我做声明的方式与数组的标准C ++声明相同:
void RandomWalkMH_mex(){
...
double** parasim = new double*[nsim];
for(int i = 0; i < nsim; ++i){
parasim[i] = new double[npara];
}
...
for(int i = 0; i < nsim; ++i){
delete [] parasim[i];
}
delete [] parasim;
...
}
MEX文件仍然可以编译成.mexw64文件,但是当我通过MATLAB命令窗口运行[y] = RandomWalkMH_mex(1000)
测试运行代码时,我收到错误:
无效的MEX文件'... \ RandomWalkMH_mex.mexw64':.... \ RandomWalkMH_mex.mexw64不是有效的Win32应用程序..
有谁知道为什么会这样?我用Google搜索相关答案,但找不到解决我问题的答案。我也研究过使用Dependency Walker,但我不确定它是否对Windows 10有用..