今天经历一个特别的bug,出现的本质原因是自己的粗心。
该bug的现象就是,我写了一个类,并写了一个构造函数,将每个成员都初始化为0或者特定值。
但是在后来使用该类的时候发现,有一个成员变量初始化之后是乱值,回去一看,这个成员变量在构造函数中是写的,初始化为0的。
然后经过好几遍观察,才发现,自己在构造函数中,将“=”写成了“==”号,编译器并没有任何报错或者提醒。
bug出现的情况如下
#include <iostream>
#include <sstream>
using namespace std;
typedef int reg_id_t;
enum mem_type{BASE_DISP,FAR_ABS,REL_ADDR};
class mem_opnd {
public:
int type;
reg_id_t base;
int scale;
reg_id_t index;
int displacement;
void* addr;
reg_id_t seg;
mem_opnd(){
type=0;
base=0;
scale=0;
index==0;
displacement=0;
addr=(void*)0x2f8;
seg=0;
}
};
int main() {
mem_opnd mopnd;
cout<<"type is "<<mopnd.type<<",base is "<<mopnd.base<<", scale is "<<", index is "<<mopnd.index<<endl;
cout<<"displacemen is "<<mopnd.displacement<<", addr is "<<mopnd.addr<<",seg is"<<mopnd.seg<<endl;
return 0;
}
我在代码中是写了对应的构造函数的
第一遍排查的时候,扫了一眼,觉得没问题,后面再排查,才发现,符号写成了“==”号
这一次是刚好代码简单,所以好定位到位置,下一回代码稍微复杂一点,可能都得费挺大力气才能排查出来。
以及如果有人出现了同样的情况,就也可以去看一下,出现乱值的变量,是否因为构造函数中等于号写错而导致的错误。