我的 mex 函数忽略了我的 if 语句
My mex function ignores my if statement
我有一个 mex 函数,它在第三个输入(即 prhs[2]
)中接受一个结构的字段,这是一个布尔值。如果为真,它将解析来自第四个输入的信息(即 prhs[3]
)。简而言之,这是代码摘录:
mxValue = mxGetField(prhs[3], 0, "change"); mxLogical *change;
change = mxGetLogicals(mxValue);
mexPrintf("true/false: %i \n", *change);
mexEvalString("drawnow;");
if ( change ) {
mexPrintf("...Parsing info... \n");
mexEvalString("drawnow;");
mxValue = mxGetField(prhs[3], 0, "info");
nRows = mxGetM(mxValue); nCols = mxGetN(mxValue);
Eigen::Map<Eigen::VectorXd> info((double *)mxGetPr(mxValue),nRows);
}
如您所见,我打印输出以查看输入 prhs[2]
是真还是假。即使函数打印出 false,if 语句也会被执行,因为我可以看到打印输出 ...Parsing info...
。
为什么我的 MATLAB mex 函数忽略了我的 if 语句?
C 不是 MATLAB! C就是C!
您正在检查指针 change
是否有值。它确实有一个值,一个内存方向,例如#72BA21
,到存储布尔值的位置。
您可以按照@buzjwa 的建议检查特定方向 if(*change)
内的内容,或者使用 mxGetData
获取数组信息,而不是指向它的指针。
附带说明:学习调试,或者至少,打印语句。一个简单的 mexPrintf()
调用就会告诉你 change
包含什么
我有一个 mex 函数,它在第三个输入(即 prhs[2]
)中接受一个结构的字段,这是一个布尔值。如果为真,它将解析来自第四个输入的信息(即 prhs[3]
)。简而言之,这是代码摘录:
mxValue = mxGetField(prhs[3], 0, "change"); mxLogical *change;
change = mxGetLogicals(mxValue);
mexPrintf("true/false: %i \n", *change);
mexEvalString("drawnow;");
if ( change ) {
mexPrintf("...Parsing info... \n");
mexEvalString("drawnow;");
mxValue = mxGetField(prhs[3], 0, "info");
nRows = mxGetM(mxValue); nCols = mxGetN(mxValue);
Eigen::Map<Eigen::VectorXd> info((double *)mxGetPr(mxValue),nRows);
}
如您所见,我打印输出以查看输入 prhs[2]
是真还是假。即使函数打印出 false,if 语句也会被执行,因为我可以看到打印输出 ...Parsing info...
。
为什么我的 MATLAB mex 函数忽略了我的 if 语句?
C 不是 MATLAB! C就是C!
您正在检查指针 change
是否有值。它确实有一个值,一个内存方向,例如#72BA21
,到存储布尔值的位置。
您可以按照@buzjwa 的建议检查特定方向 if(*change)
内的内容,或者使用 mxGetData
获取数组信息,而不是指向它的指针。
附带说明:学习调试,或者至少,打印语句。一个简单的 mexPrintf()
调用就会告诉你 change
包含什么