C ++,获取指针0xcdcdcdcd从另一个类创建一个公共类

时间:2012-09-17 13:22:12

标签: c++ pointers

我明白了:

image

这是两个类的示例代码:

main.h

class CControl
{
protected:
    int m_X;
    int m_Y;

public:
    void SetX( int X ) { m_X = X; }
    void SetY( int Y ) { m_Y = Y; }

    int GetX() { return m_X; }
    int GetY() { return m_Y; }

    CControl *m_ChildControls;
    CControl *m_NextSibling;
    CControl *m_PreviousSibling;
    CControl *m_Parent;
    CControl *m_FocusControl;
};

class CButton : public CControl
{
protected:
    bool m_Type;
    bool m_Selected;
    bool m_Focused;
public:
    CButton( bool Type );
    ~CButton();
};


CButton::CButton( bool Type )
{
}

这只是两个类的声明(它们不完整,但问题也出现在完整的编码版本中)。

的main.cpp

#include <windows.h>
#include "main.h"

int main()
{
    CButton *g_Button;
    g_Button = new CButton( 1 );

    return 0;
}

这只是应用程序主要功能,我将g_Button声明为新的CButton对象,用于进行调试分析。

3 个答案:

答案 0 :(得分:3)

您指的是CControl *会员吗?因为你没有在构造函数中初始化它们,所以它们处于一些“随机”值是正常的;特别是,您看到的值是VC ++中用于标记未初始化内存的调试版本中使用的模式。

对于类的其他字段也是如此(-842150451是0xcdcdcdcd的32位有符号整数解释。)

答案 1 :(得分:2)

指针可以是任何东西,因为它们没有被初始化。

编译器为CControl生成的默认构造函数未初始化POD成员。你需要自己编写:

CControl() : m_ChildControls(NULL),  m_NextSibling(NULL), m_PreviousSibling(NULL)
             m_Parent(NULL), m_FocusControl(NULL)
{
}

答案 2 :(得分:1)

您需要在构造函数中初始化类的数据成员。

CButton::CButton( bool Type )
{
    m_Type = Type;
    m_X = m_Y = 0;
    m_ChildControls = NULL;
    // ...
}