2016-07-06 20 views
0

私はmexコードを書いています。私はメモリを非常に効率的に使用していないと思っています。ここに私がしていることがあります。私はこの問題は私がしなければ、私はMatlabの中でそれを使用するので、私は、セグメンテーションエラーが発生しますので、私は、私は外に変数に割り当てるメモリを解放しておりませんということですメモリをmexコードで解放する

out=mxMalloc(sizeof(double)*N); 

plhs[0]=mxCreateDoubleMatrix(1,N,mxREAL); 

set(plhs[0],out); 

のようにアウトと呼ばれる変数のメモリを割り当てています。だから誰も私の上のコマンドは何をやっているより良いテクニックを提案することができますか?とにかくメモリを解放したり、長さ1X Nの行列を定義しないようにするにはどうすればよいですか?

ありがとうございました。

答えて

2

mxMallocで配列を割り当てる必要はありません。 mxCreateDoubleMatrixすでには配列を割り当てます。このデータへのポインタ(mxGetPrを使用して取得)を取得したら、配列に必要な値を入力できます。

double *out; 

// Allocate memory for the first output 
plhs[0] = mxCreateDoubleMatrix(1,N,mxREAL); 

// Get the pointer to the output data 
out = mxGetPr(plhs[0]); 

// Run your algorithm here to populate out with the data you need 

あなたには、いくつかの他の方法でoutを作成する必要性を行う何らかの理由で、あなたが前にメモリを解放への出力にその個別の配列の内容をコピーする場合。

double *out; 
double *realout; 

// Allocate data to use internally 
out = mxMalloc(sizeof(double) * N); 

// Initialize the array that will be returned to MATLAB 
plhs[0] = mxCreateDoubleMatrix(1, N, mxREAL); 
realout = mxGetPr(plhs[0]); 

// Now copy all values to the MATLAB output 
for (j = 0; j < N; j++) 
    realout[j] = out[j]; 

// Now you can free up memory for out 
mxFree(out) 
+0

私がplhs [0 [出力[出力]を指していると思われるものをplhs [0]に割り当てたいとします。私の場合は、データ1XNのベクトルであり、plhs [0]に割り当てようとしています。これは私のMATLAB出力です。あなたはあなたの答えについて詳しく述べることができますし、あなたのアウトプットと私のアウトが同じであるかどうか教えてください。 – justin

+0

@justin申し訳ありませんが、私は 'out'を意味しました。最初に 'out'を割り当てて(' mxCreateDoubleMatrix'を使って)、それをあなたのmexファイルの残りの部分に埋め込むことができます。それを別々に割り当てる必要はありません。 – Suever

関連する問題