[問題] 記憶體爆掉...關於mex file已回收

看板MATLAB作者 (aloha)時間15年前 (2010/04/08 18:45), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
第一次使用mex來使用我的c ++ code 以下是我的code 只要我設定code 的lamda_number 的值超過2時, 就會跳出out of memory的問題 ....不知道該怎麼辦? =================================================================== #include <iostream> #include "mex.h" using namespace std; #define OUT plhs[0] // 定義輸出變數 #define lamda_number 2 struct MC_result { double weight[lamda_number]; double r[lamda_number]; }; const char *fieldNames[] = {"weight", "r"}; void mexFunction(int nlhs , mxArray *plhs[] ,int nrhs , const mxArray *prhs[]) { double Total_Hemoglobin_Concentration; double Sto2_fraction; double mus_A; double mus_K; int weightFieldIndex,rFieldIndex; struct MC_result data; int dims[2]={2,1}; if (nrhs!=4) {mexErrMsgTxt("輸入參數的數目不對歐!");} Total_Hemoglobin_Concentration = mxGetScalar(prhs[0]); Sto2_fraction = mxGetScalar(prhs[1]); mus_A = mxGetScalar(prhs[2]); mus_K = mxGetScalar(prhs[3]); // 產生輸出結構陣列 OUT = mxCreateStructArray(2, dims, lamda_number, fieldNames); // 取得欄位名稱對應的索引值,以便使用 mxSetFieldByNumber() 對欄位值進行設定 weightFieldIndex = mxGetFieldNumber(OUT, "weight"); rFieldIndex = mxGetFieldNumber(OUT, "r"); data.weight[0]=Total_Hemoglobin_Concentration; data.weight[1]=Sto2_fraction; data.r[0]=mus_A; data.r[1]=mus_K; for (int i=0; i<lamda_number;i++) { mxArray *fieldValueWeight,*fieldValueR; // 填入欄位名稱 weight 的值 fieldValueWeight = mxCreateDoubleMatrix(1,1,mxREAL); *mxGetPr(fieldValueWeight) = data.weight[i]; mxSetFieldByNumber(OUT, i, weightFieldIndex, fieldValueWeight); // 填入欄位名稱 r 的值 fieldValueR = mxCreateDoubleMatrix(1,1,mxREAL); *mxGetPr(fieldValueR) = data.r[i]; mxSetFieldByNumber(OUT, i, rFieldIndex, fieldValueR); } } 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.174.25

04/12 12:03, , 1F
已解決了 XD
04/12 12:03, 1F
文章代碼(AID): #1BlRE-X0 (MATLAB)