--如果不是缘分,怎会知道是这回事。
今天调试机器时,机器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