今天为了解决一个bug折腾了大半天。
这个bug非常怪异,一个类里的一个变量,没人动它居然值就变了,gdb调试了半天找不到哪里有修改。
偶然打印出变量的地址才发现异常之处。
cc_tajk tajk;
char swrq[20];
这两行是定义的全局变量,然后swrq的地址居然和tajk类里一个成员变量的地址重合了,奇怪的是在主模块里是正常的,
tajk类在一个单独的.cpp中,在tajk类中打印输出这两个地址,就会发现这两个地址是重合的。
最后没办法把代码拷贝到一个新的目录,然后把不相干的部分逐渐去掉,检查问题是不是还存在。
用这样的办法居然发现主模块里去掉
#include <errno.h>
居然就好了,再加上这个头文件又出同样的错误了。
再仔细查找代码,发现tajk类里有个成员变量
int errno;
难道是这个变量名引起的?赶快把这个变量名换掉,果然就正常了。
当初用这个变量名的时候觉得类成员变量而且只是errno这样的名字,以为没问题,没想到还是有冲突。
看来还是用拼音字母做变量名要好些吧。