首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

内存地址莫名改变

2013-09-17 
【求助】内存地址莫名改变。遇到了一个很奇怪的问题。情况可以简化如下:char c c char * pa &c char *

【求助】内存地址莫名改变。
遇到了一个很奇怪的问题。

情况可以简化如下:


char c = 'c' ;
char * pa = &c ;
char * pc = NULL ;

pc = pa ;// 奇怪的地方就在这里了。单步调试的时候发现
         // pa 的值跟 &c 的值是一致的。可是pc却是不同的值。



真的很奇怪,感觉自己解决不了这个问题。求助。
[解决办法]
单步到下一条语句,再看看
[解决办法]
引用:
遇到了一个很奇怪的问题。

情况可以简化如下:

char c = 'c' ;
char * pa = &c ;
char * pc = NULL ;

pc = pa ;// 奇怪的地方就在这里了。单步调试的时候发现
         // pa 的值跟 &c 的值是一致的。可是pc却是不同的值。



真的很奇怪,感觉自己解决不了这个问题。求助。


每行把两个的地址都打印出来看看!
都是指向同一个地方的,理论上他们的值是一样的啊!
[解决办法]
引用:
Quote: 引用:

pc为空,还是有个不正常的值,不太可能有问题


不正常的值,比应该有的偏移一点点。我一直不明白这点偏移量是怎么造成的。
之前遇到的一个问题是这样

class IInterface
{
    virtual void func() = NULL ;
}

// 1
class CMyClass : public CWnd, public IInterface
{
}

// 2 
class CMyClass : public IInterface, public CWnd
{
}

// 这样两种写法也会导致那样的问题。执行一些步骤之后,类对象的this 指针会发生很细小的偏移


楼主你是不是把CMyClass的指针赋值给Cwnd *,然后看的指针值,这个确认会偏移的,因为你是多重继承
[解决办法]
引用:
Quote: 引用:

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 ;
}

热点排行