c++ 类写了构造函数但是对象被初始化为乱值

作者分享了在C++编程中遇到的一个bug,由于将赋值符号=误写为==,导致一个成员变量未正确初始化,引发运行时乱值问题。此经验教训强调了仔细检查和理解基本语法的重要性,尤其是在构造函数中。
摘要由CSDN通过智能技术生成

今天经历一个特别的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;
}

 

我在代码中是写了对应的构造函数的

第一遍排查的时候,扫了一眼,觉得没问题,后面再排查,才发现,符号写成了“==”号

这一次是刚好代码简单,所以好定位到位置,下一回代码稍微复杂一点,可能都得费挺大力气才能排查出来。

以及如果有人出现了同样的情况,就也可以去看一下,出现乱值的变量,是否因为构造函数中等于号写错而导致的错误。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值