C++ 呼叫MATLAB引擎 在memcpy處報錯,解決方案
阿新 • • 發佈:2019-02-04
在用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