C++:循环中变量的分配

Nic*_*ner 1 c++ memory

假设我有一个这样的循环:

vector<shared_ptr<someStruct>> vec;
int i = 0;
while (condition)
{
     i++
     shared_ptr<someStruct> sps(new someStruct());
     WCHAR wchr[20];
     memset(wchr, i, 20); 
     sps->pwsz = wchr;
     vec.push_back(sps);
}
Run Code Online (Sandbox Code Playgroud)

在这个循环结束时,我看到对于sps向量的每个元素,sps->pwsz它是相同的.这是因为我传递了一个指向循环中分配的内存的指针,这在每次迭代后被破坏,然后在下一次迭代时重新填充相同的内存?

Bri*_*ndy 5

我不认为这段代码符合您的预期.您可能希望wchr在堆上创建或作为成员创建someStruct.

wchr在堆栈上分配并在每次迭代时释放.堆栈位置在每次迭代时都是相同的(可能是相同的).

每个智能指针都包含指向该无效内存地址的指针.

在while循环之后,所有智能指针都指向同一个已释放的无效地址.地址在每次迭代时重复使用并释放.