最近写代码遇到一个奇怪问题,一个自定义的结构体全局变量,在不同文件中从某个成员开始,打印输出的结果不一致,而且就一个文件有问题。一开始任务有可能是内存越界,flash大小不够,栈空间不足导致(代码比较底层,任务栈大小都是自己分配的),死命往这两个方向上面各种测试。哈哈,就是雷打不动的就这一个文件有问题,外部因素都不是,那就可能是文件本身有问题了,把文件简化到就一个打印函数,打印出来还是错误的,没办法了,把所有无关的内容都删除了,就留一个打印函数和必须的头文件。这个时候就正常了。看来某个头文件有问题啊,把头文件一个一个添加回去,测试,确定了是哪个头文件引起的,查看了该头文件的详细内容,有一个#pragma pack(1) 和#pragma unpack(1) ,我也是醉了,第一次看到#pragma unpack(1) 的用法,赶紧百度一下,没有看到有人这样用的,取消对齐都是#pragma pack() ,这样的,看来就是这种取消对齐方式(#pragma unpack(1))没有生效导致的,修改成#pragma pack(),就一切正常了。
这还是一个大公司提供的sdk,提供这样的头文件,我也是醉了,而且这种问题不好发现,记录一下,以防以后遇到。
阅读(3727) | 评论(0) | 转发(0) |