假设我有以下代码:
void appendRandomNumbers(vector<double> &result) {
for (int i = 0; i < 10000; i++) {
result.push_back(rand());
}
}
vector<double> randomlist;
appendRandomNumbers(randomlist);
for (double i : randomlist) cout << i << endl;
重复的 push_back() 操作最终会导致重新分配,我怀疑是内存损坏。 事实上,vector.push_back() documentation说是
If a reallocation happens, all iterators, pointers and references related to the container are invalidated.
重新分配发生后,哪个作用域将具有正确的 vector ? appendRandomNumbers 使用的引用是否无效,因此它将数字插入不应放置的位置,或者“正确”的位置是否仅由 appendRandomNumbers 知道并且 vector 一旦超出范围就会被删除?
打印循环会遍历实际 vector 还是遍历 vector 以前所在的陈旧内存区域?
编辑:现在大多数答案都说 vector 引用本身应该没问题。我有一段类似于上面的代码,当我修改通过引用接收的 vector 时导致内存损坏,当我改变方法时停止内存损坏。不过,我不能排除我在更改过程中偶然修复了真正的原因。将对此进行实验。
最佳答案
我认为您对正在发生的事情感到困惑。 push_back()
可以使指向 vector 中对象的迭代器和引用无效,而不是 vector 本身。在你的情况下,不会有无效,你的代码是正确的。
关于c++ - 修改 vector 引用。什么无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31973422/