C++ 在C+中使用向量时出现堆错误+;循环?

C++ 在C+中使用向量时出现堆错误+;循环?,c++,memory,memory-management,C++,Memory,Memory Management,在for循环中声明和使用向量是否存在堆损坏的已知问题?例如,这样做: for(int i = 0; i < N; ++i) { std::vector<int> vec; for(int j = 0; j < 3; ++j) { vec.push_back(0); //-Initialize } ... ... } for(int i=0;i

在for循环中声明和使用向量是否存在堆损坏的已知问题?例如,这样做:

for(int i = 0; i < N; ++i) {
   std::vector<int> vec;
   for(int j = 0; j < 3; ++j) {
      vec.push_back(0); //-Initialize
   }
   ...
   ...
}
for(int i=0;i
不,没关系,但使用

std::vector<int> vec(3,0)
标准向量向量向量(3,0)
而不是第二个循环。

不,这很好,但是使用

std::vector<int> vec(3,0)
标准向量向量向量(3,0)
而不是第二个循环。

假设您已经用一些合理的方法参数化了
std::vector
,那么就没问题了。对于堆错误和向量,我假设您使用的是
vec[x]
,其中
x
不是有效的索引。将您的
[x]
替换为
.at(x)
,或者使用断言来帮助查找问题。您是说您确实遇到了堆损坏吗?如果是这样,这可能是由于程序完全不同部分的内存损坏造成的。你给我们看的片段看起来不错。@MooingDuck:不,我没有这个问题。稍后我将使用vec[x];但是,如果x无效,我会抛出一个错误。@squashed.bugaboo:即使你声称它是有效的:考虑到你所展示的代码,我仍然可以猜测问题的原因。假设你已经用一些合理的参数化了
std::vector
,那么就可以了。对于堆错误和向量,我假设您使用的是
vec[x]
,其中
x
不是有效的索引。将您的
[x]
替换为
.at(x)
,或者使用断言来帮助查找问题。您是说您确实遇到了堆损坏吗?如果是这样,这可能是由于程序完全不同部分的内存损坏造成的。你给我们看的片段看起来不错。@MooingDuck:不,我没有这个问题。稍后我将使用vec[x];但是,如果x无效,我会抛出一个错误。@squashed.bugaboo:即使你声称它是有效的:考虑到你所展示的代码,对于你的问题的原因,这仍然是我最好的猜测。