0被识别为NULL了,该怎么解决?

为了节省内存占用量,多个调用函数的参数都是指针地址,并添加了空指针判断,结果在调用PID函数后,我对输出结果进行判定是否为空,若为空则返回,代码如下:

PIDout = PID_PidRun(Pid);//获取PID增量模式下的输出结果

if(NULL == PIDout){
DEBUG_PRINT("channel %d, PIDout is %s\n",Channel+1, "NULL");
return;
}

结果发现串口助手中显示所有通道输出结果均为NULL,在将空指针判定的返回值修改为0后依然如此,修改为其它数值仍然显示为NULL,检查后发现,我在PID_PidRun(*Pid)中有段对通道状态进行判断的语句,以此决定后续操作,当通道状态为关闭(0)时直接返回0,将该段语句的返回值0修改为1时串口助手中就不再打印NULL信息了,代码如下:

// 判断通道PID控制是否启用
if( 0 == (* Pid).Channel_Switch)
{
return 0;
}

因此,NULL的产生原因是因为这里NULL和0是同一个东西,NULL不是专门用于指示指针为空吗?好多地方的空指针检测都是返回NULL,而且程序中0还是有用的返回值,这该怎么解决?

永不止步步 发表于10-18 10:18 浏览65535次
分享到:

已有1条评论

  • 永不止步步
    永不止步步 10-18 10:33

    是我代码中的逻辑有错误,
    本身函数的返回值类型为float,并不是返回指针类型的变量,
    因此,这时候返回值就不应该为NULL了,采用其它数值
    作为出错返回值就可以了。

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:382691个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号