我有几个配置标志,我正在实现作为结构。我创建一个对象。我用一个标志调用对象的方法,最终触发两个标志之间的比较。但是,到了这个时候,其中一个标志已被以某种方式覆盖。调用函数覆盖值
为了澄清,这里是代码的一个非常简化的版本,应该说明我所看到的:
class flag_type { unsigned int flag; /*more stuff*/ };
flag_type FLAG1
flag_type FLAG2
class MyObject {
public:
void method1(const flag_type& flag_arg) {
//conditionals, and then:
const flag_type flag_args[2] = {flag_arg,flag_arg};
method2(flag_args);
}
void method2(const flag_type flag_args[2]) {
//conditionals, and then:
method3(flag_args[0]);
}
void method3(const flag_type& flag_arg) { //Actually in a superclass
//stuff
if (flag_arg==FLAG1) { /*stuff*/ }
//stuff
}
};
int main(int argc, const char* argv[]) {
//In some functions called by main:
MyObject* obj = new MyObject();
//Later in some other functions:
obj->method1(FLAG1);
}
与调试器和打印报表,我可以证实,这两个FLAG1和flag_arg/flag_args都很好在“method1”和“method2”中。但是,当我到达method3时,“FLAG1.flag”已损坏,所以比较失败。
现在,虽然我通常对于不这样做很好,并且它在最严格的设置上通过了MSVC的静态代码分析,但对我来说,这看起来像是缓冲区溢出的行为。
我没有发现任何这样的错误看,但通常不会。我的问题是
A:我在别的地方搞砸了吗?我意识到我没有分享任何真实的代码,但是我错过了什么?这个计划在我重写了大部分代码之前就有效了。
B:有没有更简单的方法比仔细查看代码直到找到它为止?代码是跨平台的,所以我已经将它设置为在Ubuntu盒子上与Valgrind进行核对。
请发布代码编译。特别是向我们展示'flag_type'中缺少'operator =='函数。还要在某处添加输出语句,并告诉我们预期的和实际的输出是什么。 – interjay
难道这个问题出在你所反对的东西上吗?很难想象,一步一步地调试调试器(也许在汇编程序中),你仍然不会发现......接近downvote。 –
请发布一个展示您的问题的工作示例。我的编译器说:':3:1:错误:'flag_type''之前的预期初始化器。我认为你错过了一些分号。 –