this 指针自动改变?解决思路
this 指针自动改变?
一段程序,调用类成员函数时放生的上述现象?请问是什么原因,怎么解决?
------解决方案--------------------
请问你是如何确定this指针发生了改变的?
------解决方案--------------------
贴代码吧
------解决方案--------------------
楼主请把问题描述清楚,这样其他人才好帮你分析到底是什么问题。
------解决方案--------------------
你怎么判断出this指针变了?
------解决方案--------------------
看来情况比较复杂,靠猜测显然不会有结果的。
------解决方案--------------------
最有可能是前面函数调用过程导致堆栈溢出或者是数组越界,包括指针所访问的空间越界,使得弹栈后寄存器eax的值异常,这样this指针就被改变了。
------解决方案--------------------
用事实说话
。
------解决方案--------------------
是否在不同的frame中?
------解决方案--------------------
------解决方案--------------------
既然lz能确认this改变了,那也该知道哪段代码改变了this,那么请贴代码
------解决方案--------------------
正常情况下,在不同基类之间会有偏移。 如果程序出错了,什么都有可能发生。
------解决方案--------------------
正常情况下,在不同基类之间会有偏移。 如果程序出错了,什么都有可能发生。
------解决方案--------------------
this指针调整,在多继承或者基类无虚函数而派生类定义了虚函数的情况下都可能会发生
一段程序,调用类成员函数时放生的上述现象?请问是什么原因,怎么解决?
------解决方案--------------------
请问你是如何确定this指针发生了改变的?
------解决方案--------------------
贴代码吧
------解决方案--------------------
楼主请把问题描述清楚,这样其他人才好帮你分析到底是什么问题。
------解决方案--------------------
你怎么判断出this指针变了?
------解决方案--------------------
看来情况比较复杂,靠猜测显然不会有结果的。
------解决方案--------------------
最有可能是前面函数调用过程导致堆栈溢出或者是数组越界,包括指针所访问的空间越界,使得弹栈后寄存器eax的值异常,这样this指针就被改变了。
------解决方案--------------------
用事实说话
。
------解决方案--------------------
是否在不同的frame中?
------解决方案--------------------
------解决方案--------------------
既然lz能确认this改变了,那也该知道哪段代码改变了this,那么请贴代码
------解决方案--------------------
正常情况下,在不同基类之间会有偏移。 如果程序出错了,什么都有可能发生。
------解决方案--------------------
正常情况下,在不同基类之间会有偏移。 如果程序出错了,什么都有可能发生。
------解决方案--------------------
this指针调整,在多继承或者基类无虚函数而派生类定义了虚函数的情况下都可能会发生
- C/C++ code
#include<iostream> using namespace std; class B1 { public: void print_this() { cout<<this<<endl; } private: int b1; }; class B2 { public: void print_this() { cout<<this<<endl; } private: int b2; }; class D : public B1, public B2 { public: void print_this() { cout<<this<<endl; } private: int d; }; class X { public: void print_this() { cout<<this<<endl; } private: int x; }; class Y : public X { public: virtual void vfunc() { } void print_this() { cout<<this<<endl; } private: int y; }; int main() { D d; d.print_this(); d.B1::print_this(); d.B2::print_this(); Y y; y.print_this(); y.X::print_this(); system("pause"); return 0; }