小编Kiy*_*ano的帖子

ZeroMemory 具有 std::string 的结构并为其赋值在 VS2010 和 VS2017 中具有不同的行为

我们正在将旧的 MFC 项目从 VS2010 升级到 VS2017,当将数据分配给使用 ZeroMemory 清除的结构内的 std::string 时,我们发现了不同的行为。

我创建了一个简单的 MFC 程序来重现该问题。

std::string getStrData() {
    std::string temp = "world";
    return temp;
}

CMainFrame::CMainFrame()
{
    struct mystruct{
        std::string mystr_in1;
        std::string mystr_in2;
    };
    std::string mystr_out = "hello";
    mystruct* sttemp = new mystruct();
    ZeroMemory(sttemp, sizeof(mystruct));  // <-- we think this is bad
    sttemp->mystr_in1 = mystr_out;         // <-- VS2010: "hello" is assigned, but VS2017: garbage is assigned
    sttemp->mystr_in2 = getStrData();      // <-- VS2010 and VS2017: "world" is assigned
}
Run Code Online (Sandbox Code Playgroud)

在VS2010中,mystr_out(“hello”)的值被正确分配给mystr_in1。然而在VS2017中,垃圾数据被分配给mystr_in1。我在 StackOverflow 中读到类似的问题,在这种情况下执行 ZeroMemory …

c++ mfc visual-studio-2010 visual-studio-2017

0
推荐指数
1
解决办法
198
查看次数

标签 统计

c++ ×1

mfc ×1

visual-studio-2010 ×1

visual-studio-2017 ×1