在用C++调用MATLAB做数值计算的时候,遇到了内存越界报错
...
y1 = mxCreateDoubleMatrix(1, N, mxREAL);
memcpy((void*)mxGetPr(y1), (void*)y, N*sizeof(double));
代码如上,光看这一句似乎没什么问题,花了半天功夫才找到原因:MATLAB引擎没有初始化
mxCreateDoubleMatrix(1, N, mxREAL);这一句返回的是NULL
解决方案:
在创建矩阵之前先初始化引擎
mclInitializeApplication(NULL, 0);
...
y1 = mxCreateDoubleMatrix(1, N, mxREAL);
memcpy((void*)mxGetPr(y1), (void*)y, N*sizeof(double));
还可以改进的是:将memcpy改成memcpy_s
mclInitializeApplication(NULL, 0);
Engine *ep;
if (!(ep = engOpen("\0"))) {
MessageBox("打开MATLAB失败");
return;
}
y1 = mxCreateDoubleMatrix(1, N, mxREAL);
memcpy_s((void*)mxGetPr(y1), sizeof(double)*N,(void*)y, N*sizeof(double));
将memcpy改成memcpy_s的好处是方便debug
在C++中使用MATLAB引擎进行数值计算时遇到内存越界问题,原因是MATLAB引擎未初始化导致mxCreateDoubleMatrix返回NULL。解决方案是在创建矩阵前初始化引擎,并将memcpy替换为更安全的memcpy_s以优化调试。
6481

被折叠的 条评论
为什么被折叠?



