呼叫 engPutVariable 將 1×N 雙精度矩陣傳給 MATLAB Engine 時,N ≤ 16 正常,N > 17 即崩潰。常見原因:
mxCreateDoubleMatrix 配置的記憶體未正確釋放,或在不該 free 的地方釋放。memcpy 複製長度錯誤:sizeof(datax) 若 datax 是指標而非陣列,只會取得指標大小(4/8 bytes),導致寫入越界。// 正確複製方式(假設 datax 為 double 陣列)
double *datax = malloc(N * sizeof(double));
// ... 填入資料 ...
mxArray *X = mxCreateDoubleMatrix(1, N, mxREAL);
memcpy(mxGetPr(X), datax, N * sizeof(double)); // 用 N * sizeof(double),而非 sizeof(datax)
engPutVariable(ep, "X", X);
mxDestroyArray(X); // 用畢釋放
free(datax);
若問題持續,建議在 engPutVariable 前後加入日誌,確認 mxArray 結構完整性,並檢查 MATLAB 授權狀態。