假设我有一个这样的循环:
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
它是相同的.这是因为我传递了一个指向循环中分配的内存的指针,这在每次迭代后被破坏,然后在下一次迭代时重新填充相同的内存?
我不认为这段代码符合您的预期.您可能希望wchr
在堆上创建或作为成员创建someStruct
.
wchr
在堆栈上分配并在每次迭代时释放.堆栈位置在每次迭代时都是相同的(可能是相同的).
每个智能指针都包含指向该无效内存地址的指针.
在while循环之后,所有智能指针都指向同一个已释放的无效地址.地址在每次迭代时重复使用并释放.
归档时间: |
|
查看次数: |
948 次 |
最近记录: |