为什么 arraysize 在我的 mex 代码中被识别为零?
Why arraysize is identified as zero in my mex code?
我有一个 mex 函数,我在 matlab 中通过以下命令(界面)使用它:
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
?
mxGetPr
似乎 return 一个 double *
我在网上找到的。
(https://nl.mathworks.com/help/matlab/apiref/mxgetpr.html?s_tid=gn_loc_drop)
转换并将其分配给 int *arraysizePtr
将导致 double
数据在通过 *arraysizePtr
访问时被解释为 int
,产生无意义。
我有一个 mex 函数,我在 matlab 中通过以下命令(界面)使用它:
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
?
mxGetPr
似乎 return 一个 double *
我在网上找到的。
(https://nl.mathworks.com/help/matlab/apiref/mxgetpr.html?s_tid=gn_loc_drop)
转换并将其分配给 int *arraysizePtr
将导致 double
数据在通过 *arraysizePtr
访问时被解释为 int
,产生无意义。