我明白了:
这是两个类的示例代码:
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对象,用于进行调试分析。
答案 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;
// ...
}