内存地址莫名改变
【求助】内存地址莫名改变。遇到了一个很奇怪的问题。情况可以简化如下:char c c char * pa &c char *
【求助】内存地址莫名改变。
遇到了一个很奇怪的问题。
情况可以简化如下:
char c = 'c' ;
char * pa = &c ;
char * pc = NULL ;
pc = pa ;// 奇怪的地方就在这里了。单步调试的时候发现
// pa 的值跟 &c 的值是一致的。可是pc却是不同的值。
真的很奇怪,感觉自己解决不了这个问题。求助。
[解决办法]单步到下一条语句,再看看
[解决办法]每行把两个的地址都打印出来看看!
都是指向同一个地方的,理论上他们的值是一样的啊!
[解决办法]楼主你是不是把CMyClass的指针赋值给Cwnd *,然后看的指针值,这个确认会偏移的,因为你是多重继承
[解决办法]
pc为空,还是有个不正常的值,不太可能有问题
不正常的值,比应该有的偏移一点点。我一直不明白这点偏移量是怎么造成的。
之前遇到的一个问题是这样
class IInterface
{
virtual void func() = NULL ;
}
// 1
class CMyClass : public CWnd, public IInterface
{
}
// 2
class CMyClass : public IInterface, public CWnd
{
}
// 这样两种写法也会导致那样的问题。执行一些步骤之后,类对象的this 指针会发生很细小的偏移
当做Cwnd用和当做IInterface用,this是会不一样的,多重继承就是这个样子。其实第二种写法是错误的,MFC不能正确处理CWnd作为第二个基类的情况。
至于char*那段代码,是你臆想的吧?
[解决办法]1)
char c = 'c' ;
char * pa = &c ;
char * pc = NULL ;
pc = pa ;// 奇怪的地方就在这里了。单步调试的时候发现
// pa 的值跟 &c 的值是一致的。可是pc却是不同的值,不奇怪, 这个语句没执行到。
//调试到这个位置,看一下!
printf("&c=%p,pa =%p,pc=%p\n",&c,pa,pb);
2)指针有指针的用法,对象有对象的用法,习惯了,就不会有这些问题了
// 1
class CMyClass
{
public:
CClassA m_ClassA ;
CClassB m_ClassB ;
}
//2
class CMyClass
{
public:
CClassA * m_pClassA ; // 这里指向了两个对象,能确保他们不会过早退出
CClassB * m_pClassB ;
}