初始化类具有{0}
问题描述:
I'm运行传统的C++ MFC软件进入DevPartner Studio和他们抱怨了很多关于这些行:初始化类具有{0}
PARAFORMAT pf = {0};
凡PARAFORMAT为A类。被初始化这样任何类,提高DevPartner弹出式菜单此错误:
Write Overrun: Memory write to 0x002B9D18 (152) overruns local variable pf 0x002B9D14 (156) in function CServerWnd::OnInitDialog; parameter 1 in call to memset.
看起来明显,我认为是压倒正确的变量。 这种结构是正确的?我可以放心地忽略这些警告?
编辑: 这里是PARAFORMAT
typedef struct _paraformat
{
UINT cbSize;
DWORD dwMask;
WORD wNumbering;
WORD wEffects;
LONG dxStartIndent;
LONG dxRightIndent;
LONG dxOffset;
WORD wAlignment;
SHORT cTabCount;
LONG rgxTabs[MAX_TAB_STOPS];
} PARAFORMAT;
答
没有看到PARAFORMAT,这里是我看看会发生什么。
PARAFORMAT是一个POD结构/类,大小为156字节。您的初始化器语法强制编译器生成代码以初始化该类的所有成员。初始化时,该类的所有成员将实际写入0。
因此,编译器会设置您在初始化程序列表中指定的初始值0,然后将clever和memset的结构的其余部分设置为0,而不是单独设置每个成员变量。
这个memset调用被DevPartner中的一个检查所捕获 - 它不喜欢在没有调用memset的情况下memset你的本地变量,并产生一个警告。
因此,等待更多信息,我会说这是DevPartner中的一个损坏检查,您可以忽略它。
看到PARAFORMAT结构我认为,上面的描述是正确的之后:如果/当你提供我们所需要的信息:)
编辑的其余部分,我会保留我改变主意的权利。
向我们展示PARAFORMAT。 – Erik 2011-03-17 00:19:28