1. 程式人生 > >C++ 呼叫MATLAB引擎 在memcpy處報錯,解決方案

C++ 呼叫MATLAB引擎 在memcpy處報錯,解決方案

在用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