【发布时间】:2015-10-09 20:29:55
【问题描述】:
vector<int> nums = {1, 2, 3};
vector<vector<int>> subsets = {{}};
for(int i=0; i<3; i++)
for(auto subset : subsets)
{
subset.push_back(nums[i]);
subsets.push_back(subset);
}
subsets的内容,运行后竟然是:
[[] [1] [2] [2] [3] [3] [3] [3]]
但是,我期待:
[[] [1] [2] [1 2] [3] [1 3] [2 3] [1 2 3]]
似乎只考虑第一个元素,即空的vector<int>。
您能否告诉我在内存分配方面到底发生了什么?
PS:我也将subsets.push_back(subset) 更改为subsets.push_back(vector<int>(subset)),但仍然给出相同的错误结果。
【问题讨论】:
-
UB。您的
subsets.push_back调用使基于范围的for循环使用的迭代器无效。 -
@T.C.你能更准确一点吗?你的意思是,在
subsets.push_back(subset)之后,auto for循环终止了吗? -
在 UB 之后任何事情都可能发生。
标签: c++ c++11 memory-management