printf引发的内存操作问题
本来很简单的UDP通信程序,移植到嵌入式板子中运行,却发现在进行发送时,目的ip地址莫名其妙的被清空了,一开始还怀疑是板子里缺少库,后来又将程序中关于UDP的代码粘了出来单独搞了个UDP测试程序,发现没问题,能够正常通信。
在百思不得解的时候,发现两段代码里只是差了一个printf,立马检查该条语句,结果发现,在指定printf输出格式时,有一个应该是整形,结果被我强制输出成了浮点型,就导致了内存的异常操作,以至于目的地址被异常清空,错误代码如下:
printf("sendWarn type:%d,detail:%.2lf to %s\n", warnNode->warn.warnType, warnNode->warn.warnDetail, inet_ntoa(sAddr.sin_addr));
其中warn.warnDetail为int类型,然而在输出时却将其指定输出成了float类型,不过二者都是4字节的,没搞明白为什么造成了内存异常操作。导致我后面的目的地址输出一直是NULL,udp发送直接挂掉了。后面将%.2lf改成%d就可以了。