结构体字段错位引起的"1970-1-1 08:00:01"的问题
来源:互联网 发布:js获取当天0点时间戳 编辑:程序博客网 时间:2024/05/17 01:19
工作中负责开发一个dll模块,导出几个extern C的函数供其他模块回调。其中主要函数的签名如下:
int DoResponse(const CAlert* pAlert);
函数接收一个报警结构体指针pAlert,记录报警内容到数据库。
昨天加班的时候,测试提了一个bug,数据中时间字段出现了异常的"1970-1-1 08:00:01".我的模块在06.30的Daily Build安装包是好的,但是打上07.10的patch,更新了和我的模块交互的几个dll之后,就发生了问题。
分析之后,发现是数据库中记录的CAlert结构体字段发生了错位,该字段记录了值为1的time_t。
经过半天的调试,发现原因出在报警结构体文件定义上。我负责的模块在06.30之后就没有更改过,07.10的patch中也没有更新我的模块;在07.01之后,定义CAlert的头文件中,CAlert结构体成员字段的位置被调整了一次,07.10的sp1中其他几个和我的模块交互的模块被更新,而我的模块没有更新。因此从其他模块传递过来的报警结构体的成员位置也就不再和我的模块的结构体成员位置一致,因此记录到数据中的字段发生了错位。
代码示例:
原来代码定义:
class CAlert
{
int m_nId; //编号
int m_nTime: // 时间
int m_nCount; // 计数
}
被改为:
class CAlert
{
int m_nId; //编号
int m_nCount; // 计数
int m_nTime; // 时间
}
则时间字段和count字段将会颠倒。
在解下了一个patch中更新一下这个模块,问题解决。
分析发生问题的主要原因在于沟通不利,象这种公用接口的变化,需要通知相关受影响人员。此外,结构体成员位置的调整,也会引起接口的变化,这一点要注意。
- 结构体字段错位引起的"1970-1-1 08:00:01"的问题
- oracle添加字段引起的问题
- 字段类型修改引起的性能问题
- Listview错位的问题
- 错位的字符串问题
- ARM平台 结构体字节对齐引起的一个问题
- 区域间人口流动所引起的教育投资收益错位问题
- 表索引字段嵌套函数引起的性能问题
- Ibatis缓存select字段名引起的问题
- Android ViewGroup 中 mFocused 字段引起的问题
- IE6下注释引起的文字溢出和浮动错位
- 字段定义引起的bug
- UIImage imageNamed引起的内存问题1
- 关于ListView 错位的问题
- 解决TextView错位的问题
- iOS UITableview错位的问题
- 解决图片错位的问题
- 李代桃僵-列表里横竖展示图片动态调整高宽因复用引起的错位问题
- 字符串不能超过8000问题
- sqlserver中怎么对text、ntext和image操作
- 删除表的记录后如何使ID从1开始
- ms sql server数据库无法输入简单体字
- 如何制作数据库的安装程序
- 结构体字段错位引起的"1970-1-1 08:00:01"的问题
- 实体-联系模型(习题)
- 放弃什么都不要放弃希望!缺少什么也不能缺少信念!
- 大表建立索引时候的注意问题
- 东方不败转行IT以后谈软件开发
- SubItem Selection in List Control改进版
- access连接远程数据库
- Tomcat 中 "The value for the useBean class attribute is invalid" 错误的排除
- JDBC开发时的一个“可爱的”错误