0
私は、二重のポインタで定義された2次元配列で使用e.g、リターンダブルポインタの2次元マトリックス
double** array;
array = (double**) calloc(numRows, sizeof(double*));
for (int i = 0; i < numRows; i++)
{
array[i] = (double*) calloc(numCols, sizeof(double));
/* then array[i][j] = values */
}
// code to return matlab array
plhs[0] = mxCreateDoubleMatrix(numRows, numCols, mxREAL);
// memory copy
// ?????????
for (i = 0; i < numRows; i++){
free(array[i]);
}
free(array);
ています私はMathWorks社のMATLABでarray
を返したいです。作業されていない、我々はこのmxSetPr(OUT, *stacked2D);
ようmem-copy
機能でそれを行うことができる場合、私は疑問に思っています
stacked1D = mxGetPr(plhs[0]);
int n = 0;
for (int r = 0; r < max_degree; r++)
for (int c = 0; c < n_vars; c++)
stacked1D[n++] = stacked2D[r][c];
:私は// memory copy
部分が今まで持っていると私はそれは大丈夫だと思うの実行は、私はあるを修正してくださいこの構文では
ヒント説明や回答がありますか?
を第一に、に 'calloc'を使用する必要はありませんC++プログラム。動的にメモリを割り当てる場合は、 'new []'を使います。第二に、より効率的に2D配列を割り当てる方法、[メモリプール全体を割り当てる]方法[この回答を見る](http://stackoverflow.com/questions/23458486/delete-2d-array-c/23458646#23458646)あなたのコードが今やっているようにチャンクではなく。 – PaulMcKenzie
@PaulMcKenzie素晴らしいリンク。あなたがそうすることができるということは、私には起こりませんでした。 – NathanOliver
memcpyの部分については、( 'new []'を2回だけ呼び出す必要があるリンクのメソッドを使用して)配列を割り当てる必要がありますが、データをコピーするには、ソースから 'memcpy'宛先プール。もしあなたのメソッドについていたら、 'n x n'マトリックスに対して' memcpy'を 'n'回呼び出すループが必要になります。 – PaulMcKenzie