记一次printf导致的异常内存操作bug

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就可以了。

猜你喜欢

转载自blog.csdn.net/qq_35308053/article/details/121292317