VS2017

时间:2018-06-06 16:05:37

标签: c++ string visual-studio-2017

考虑以下代码片段(模仿我的大项目中正在进行的事情,使用C ++代码中的一些C例程)

#include <string>
#include <iostream>
#include "stdafx.h"
struct lName
{
       std::string name;
};

void lalloc( int *nloc, lName **tst)
{
       lName *tst1;
       int bn = 2;
       tst1 = (lName*)malloc(bn * sizeof(*tst1));
       memset((void*)tst1, 0, bn * sizeof(*tst1));
       *nloc = bn;
       *tst = tst1;
}
void ltest()
{
       std::string fid = "tst";
       lName *tst, *tst1;
       int lsz;
       lalloc(&lsz, &tst);
       for (int j = 0; j < lsz; ++j)
       {
              tst1 = &tst[j];
              tst1->name = fid;
              std::cout << "fid : " << fid << " Name: " << tst1->name << "\n";
       }
}

在Visual Studio 2017中,tst1->name的内容在赋值后是垃圾(在分配之前为空字符串)。但是,如果我使用tst1->name = std::string(fid);,它似乎按预期工作(我的理解是这一行将创建一个临时的)。似乎在VS2012中也能正常工作。代码中有什么东西不符合要求吗? (真正的代码涉及适当释放内存等)

0 个答案:

没有答案