c++ - 修改 vector 引用。什么无效?

标签 c++ memory vector memory-corruption

假设我有以下代码:

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/

相关文章:

c++ - 如果您在 C++ 中更新集合的成员,集合会自动更改顺序吗?

python - 如何在 8G DDR3 RAM 中托管大型列表?

c++ - 填充 std::vector 时的不同地址

c++ - 在 vector 中按一个词查找行

c++ - 在 C++ 应用程序中集成 ANTLR 4

c++ - 混合别名和模板特化

Android 内存泄漏 : Multiple instances of activity in multiple threads

sql-server - 有没有办法在我的 C# 应用程序中复制内存无法读取错误消息?

Java/JavaME : Quicker geometric vector addition

c++ - 如何查找字符串是否与数组中找到的字符串匹配?