首页 > 解决方案 > 将 std::vector 传递给 C++ 中的函数时的内存分配

问题描述

考虑以下简单示例:

#include <vector>

void func(std::vector<int>* output) {
  std::vector<int> temp(10000);
  /* ... do work here and fill temp with useful values ... */

  // now send the result to main
  *output = temp;
}

int main(void) {
  std::vector<int> vec;
  // func will put useful values in vec
  func(&vec);

  for(size_t i=0; i<10000; i++)
    vec[i] = 3; // just checking to see if I get a memory error

  return 0;
}

我曾经认为必须先分配内存vec才能使用它(例如,通过调用output->resize(10000)?)。因此,我希望vec在调用funcfor 循环后使用时会出现内存错误,但似乎代码工作得很好。

你能解释一下这种行为吗?此外,这是否是您编写此代码的方式(即,当您需要一个应该填充向量的函数时,也许每次都有不同数量的值,尽管这里是10000)?(PS。我不想用return)。

谢谢!

标签: c++pointersparameter-passingdynamic-memory-allocation

解决方案


参考std::vector:_

向量的存储是自动处理的,可以根据需要进行扩展和收缩。

正是这种品质std::vector使它非常易于使用。

在您的代码中

*output = temp;

此行将temp向量复制到output中,即调用赋值运算符。您不必关心这是如何在内部完成的,但您可以假设之后指向的向量output包含temp.


推荐阅读