被奇怪的bug给弄疯了,问题详细描述起来是这样:
以函数C为起始,调用某个函数A来以new的方式创建一个新的结构体,一些参数直接赋值给结构体相应成员变量,另外一些成员变量的值通过子函数B调用2级子函数加以计算生成.
按理说这都没有问题,编译和测试也没问题,
然而问题来了——
在测试中,我在子函数结束前插入了显示所生成成员变量内容的printf,其中通过结果显示同2级子函数中的计算结果一致。
然而当我返回到更上一级的函数C中,试图访问通过A生成并赋值的结构体时,结构体中只有直接以C传给A的参数直接赋值的成员变量有正确的值,其余通过调用函数B赋值的成员变量全部被"复位"了——就好像B函数对他们干的事情在A函数结束时被消除了一样,
总结起来就是,
C函数传递了一些参数给A函数,A函数以new的方式创建了一个新的结构体对象O,将这些参数赋值给了O的一部分成员变量的同时,调用结构体对象O的成员函数B,B函数利用最初从C传递给A的参数,进行了计算并为O的另一部分成员变量赋值.
然而B对O的操作只在A函数结束前有效,一旦A函数调用结束返回到C函数,访问O的成员变量,只有最初直接以参数赋值的成员变量保持了相应数值,B函数的赋值被消除了.
我实在搞不清楚到底是怎么一回事,
试着将B函数改为结构体外函数,无效;
试着在A中调用另一个同样通过计算对结构体成员赋值的D函数,其结果与调用B函数一致.
所以这是C++的什么奇怪设定么?
还是我什么地方搞错了?
楼下贴代码,希望高人能指点一二.
提前谢过.
以函数C为起始,调用某个函数A来以new的方式创建一个新的结构体,一些参数直接赋值给结构体相应成员变量,另外一些成员变量的值通过子函数B调用2级子函数加以计算生成.
按理说这都没有问题,编译和测试也没问题,
然而问题来了——
在测试中,我在子函数结束前插入了显示所生成成员变量内容的printf,其中通过结果显示同2级子函数中的计算结果一致。
然而当我返回到更上一级的函数C中,试图访问通过A生成并赋值的结构体时,结构体中只有直接以C传给A的参数直接赋值的成员变量有正确的值,其余通过调用函数B赋值的成员变量全部被"复位"了——就好像B函数对他们干的事情在A函数结束时被消除了一样,
总结起来就是,
C函数传递了一些参数给A函数,A函数以new的方式创建了一个新的结构体对象O,将这些参数赋值给了O的一部分成员变量的同时,调用结构体对象O的成员函数B,B函数利用最初从C传递给A的参数,进行了计算并为O的另一部分成员变量赋值.
然而B对O的操作只在A函数结束前有效,一旦A函数调用结束返回到C函数,访问O的成员变量,只有最初直接以参数赋值的成员变量保持了相应数值,B函数的赋值被消除了.
我实在搞不清楚到底是怎么一回事,
试着将B函数改为结构体外函数,无效;
试着在A中调用另一个同样通过计算对结构体成员赋值的D函数,其结果与调用B函数一致.
所以这是C++的什么奇怪设定么?
还是我什么地方搞错了?
楼下贴代码,希望高人能指点一二.
提前谢过.