-2

我明白了:

图片

这是两个类的示例代码:

主文件

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 )
{
}

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

主文件

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

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

    return 0;
}

这只是我将 g_Button 声明为新的 CButton 对象以进行调试分析的应用程序主函数。

4

3 回答 3

3

你指的是CControl *成员吗?由于您没有在构造函数中初始化它们,因此它们处于某个“随机”值是正常的;特别是,您看到的值是在 VC++ 中的调试构建中使用的模式,用于标记未初始化的内存。

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

于 2012-09-17T13:26:18.633 回答
2

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

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

CControl() : m_ChildControls(NULL),  m_NextSibling(NULL), m_PreviousSibling(NULL)
             m_Parent(NULL), m_FocusControl(NULL)
{
}
于 2012-09-17T13:25:24.560 回答
1

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

CButton::CButton( bool Type )
{
    m_Type = Type;
    m_X = m_Y = 0;
    m_ChildControls = NULL;
    // ...
} 
于 2012-09-17T13:25:12.757 回答