ここに正しく実行されるCmexファイルがありますが、実行が完了すると、MATLABがsegfaultでクラッシュします。プログラムの実行が終了するとクラッシュするため、MATLABによる割り当てられたメモリの自動解放が問題の原因であると思われます。ただし、動的に割り当てられた独自の変数を解放し、mxArray構造を解放しようとはしません。見て、MATLABがクラッシュする原因を特定するのに役立つかどうかを確認してください。
#include <mex.h>
#include <matrix.h>
#include <stdio.h>
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
/* Declare variables. */
int i ,j, numdims, *ipos, count;
const mwSize *dim_array;
mwSize size;
double *pos, rad;
/* Ingest inputs. */
numdims = mxGetNumberOfDimensions(prhs[0]);
dim_array = mxGetDimensions(prhs[0]);
rad = mxGetScalar(prhs[1]);
pos = mxGetData(prhs[0]);
size = dim_array[0]*dim_array[1];
ipos = (int*) mxMalloc(size);
for (i = 0; i < size; i++)
ipos[i] = (int) (pos[i]*rad);
count = 0;
for (i = 0; i < size; i+=2)
for (j = i + 2; j < size; j+=2)
if (ipos[i] == ipos[j])
if (ipos[i+1] == ipos[j+1])
count++;
mxFree(ipos);
/* Generate output */
plhs[0] = mxCreateDoubleScalar(count);
printf("\nProgram finished executing!\n");
}
助けてくれてありがとう!
編集:プログラムへの入力は、(順番に)2 xn行列とスカラーであることが意図されていることにも注意する必要があります。ここで、nは任意の正の整数です。実際のプログラムは寸法を正しくチェックしますが、コードスペースを節約するためにこれらの行をここに含めませんでした。