正在使用{0}初始化类 我在DevPartner工作室中运行了一个传统的C++ MFC软件,他们抱怨这些线路: PARAFORMAT pf = {0};

正在使用{0}初始化类 我在DevPartner工作室中运行了一个传统的C++ MFC软件,他们抱怨这些线路: PARAFORMAT pf = {0};,c++,debugging,class,memory,C++,Debugging,Class,Memory,其中PARAFORMAT是一个类。任何以这种方式初始化的类,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是一个类。任何以这种方式初始化的类,DevPartner都会弹出以下错误:

Write Overrun: Memory write to 0x002B9D18 (152) overruns local variable pf 0x002B9D14 (156) in function CServerWnd::OnInitDialog; parameter 1 in call to memset.
对我来说,这显然是覆盖了正确的变量。 这个结构是对的?我可以安全地忽略这些警告吗

编辑: 这是副格式

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;

一般来说:你只能像那样初始化一个POD,一个类是由它的构造函数初始化的。

在没有看到PARAFORMAT的情况下,下面是我对发生的事情的看法

PARAFORMAT是一个POD结构/类,大小为156字节。初始值设定项语法强制编译器生成代码来初始化类的所有成员。初始化时,该类的所有成员将有效地写入0

因此,编译器将您在初始值设定项列表中指定的初始值0设置为0,然后再将结构的其余部分设置为0,而不是单独设置每个成员变量

这个memset调用被DevPartner中的一个检查捕获-它不喜欢在不调用memset的情况下memset您的局部变量,并生成警告

因此,在等待更多信息之前,我想说这是DevPartner中的一个坏检查,您可以忽略它。如果/当您提供我们需要的其他信息时,我将保留改变主意的权利:)

编辑:


在看过PARAFORMAT结构之后,我相信上面的描述是正确的

我在主题中加入了PARAFORMAT很好的答案!我在主题中添加了PARAFORMAT供您检查@布拉多:好的,我认为检查是错误的-初始化列表的使用是正确的,并且定义良好。我会说忽略这些警告(或者告诉DevPartner人员修复他们的东西)