我的mex函数忽略了我的if语句

时间:2018-01-18 05:26:57

标签: matlab mex

我有一个mex函数,它接受第三个输入中的结构字段(即prhs[2]),这是一个布尔值。如果为true,它将解析来自第四个输入的信息(即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语句?

1 个答案:

答案 0 :(得分:2)

C不是MATLAB! C是C!

您正在检查指针change是否有值。它确实具有一个值,一个记忆方向,例如#72BA21,到存储布尔值的位置。

你可以检查@buzjwa建议的特定方向if(*change)内的内容,或者使用mxGetData获取有关数组的信息,而不是指向它的指针。

作为旁注:学习调试,或至少打印语句。一个简单的mexPrintf()调用会向您显示change包含的内容