为了节省内存占用量,多个调用函数的参数都是指针地址,并添加了空指针判断,结果在调用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还是有用的返回值,这该怎么解决?
是我代码中的逻辑有错误,
本身函数的返回值类型为float,并不是返回指针类型的变量,
因此,这时候返回值就不应该为NULL了,采用其它数值
作为出错返回值就可以了。