我的 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 包含什么