2017-01-01 9 views
0

Iは、MEX機能を有しており、私は、次のコマンド(インタフェース)と、MATLABでそれを使用している:なぜ私のmexコードでは、配列は0と識別されますか?

Matsize = 30555

Fv_calc(:,2) = mx_solve_quadratic(QuadraticCoefficients,MatSize); 

は、ゲートウェイ機能は以下の通りである:

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 
{ 
    int *arraysizePtr = NULL; 
    arraysizePtr = (int *)mxGetPr(prhs[1]); 
    int arraysize = *arraysizePtr; 
    float *inMatrix = NULL; 
    inMatrix = (float *)mxGetPr(prhs[0]); 
    const float a = 1; /* coefficient for x^2 is always 1*/ 
    plhs[0] = mxCreateNumericMatrix(arraysize, 1, mxSINGLE_CLASS, mxREAL); 
    float *out = (float *)mxGetPr(plhs[0]); 
    float x0; /* the smaller root */ 
    float x1; /* the bigger root */ 
    int fOutput = 0; 
    int i = 0; 
    for (i = 0; i < arraysize; i++) 
    { 
     fOutput = gsl_poly_solve_quadratic(a, inMatrix[i], inMatrix[i + arraysize], &x0, &x1); 
     out[i] = (x1 > 0 ? x1 : 0); 
    } 
} 

私は以前にコードを実行したので、すべてが真であり、ちょうどわずかな変更が加えられました。 mexコードを実行しているときにarraysizeが0と表示されているのはなぜわかりませんか?

答えて

1

mxGetPr私はオンラインで見つけられるものからdouble *を返すようです。

https://nl.mathworks.com/help/matlab/apiref/mxgetpr.html?s_tid=gn_loc_drop

鋳造およびint *arraysizePtrに割り当てるはナンセンスを得intアクセストラフ*arraysizePtrとして解釈されるべきdoubleデータが発生します。

+0

OK、コードは次のように記述する必要があります: 'double * arraysizePtr = NULL; \t arraysizePtr = mxGetPr(prhs [1]); \t const int arraysize =(int)* arraysizePtr; ' – sepideh

関連する問題