一个未初始化引发的灾难

--如果不是缘分,怎会知道是这回事。

 

今天调试机器时,机器boot不起来,抛出异常信息,觉得很诡异,查看了代码,大致如下:

-------------------------------------------------------

struct A
{
...
...
...
}

 

void my_func1(para1, para2)
{
struct A a_object; //此处并未进行结构体的初始化


system_init(a_object);//外部提供的init结构
}

----------------------------------------------------------
      system_init()是别人提供的接口,my_func是我完成的,这么调用下来一直没能正常工作,最后终于找出问题所在,声明的结构体对象没进行初始化,而在C++中应该都有默认的构造函数来为对象进行初始化吧。其实也是因为system_init(a_object);并没有对结构体中的所有成员一一赋值(因为提供的只是接口,在要求他人提供该借口的代码前,我是不知道这回事的),因此,在使用该结构体变量时,成员中那些未被system_init(a_object);赋值的成员仍保留着原来内存块中的值(这个值是不可预料的),就有问题。
增加一个初始化函数,对需要的成员赋为0,问题解决。

void my_func1(para1, para2)
{

struct A a_object;

 

my_init_to_zero(a_object);//增加这么一个init,问题解决

system_init(a_object);
}

      关于这个初始化问题,又不得不提到一个问题,编码规范与质量,一直在强调编码规范,如定义一个变量时能否及时初始化再使用。如加参数判断语句等等这些。在没有发生任何问题时,觉得不重要,一旦出问题,又觉得不可思议,让你抓不着头脑,很诡异。

 

--所谓的"按规矩办事"应该是有一定道理。

 

                                                                      ---只能说是缘分!

   2011/02/23

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值