我想定义一个 3 维向量,其中前两个维度是固定的,但我希望第三个向量由循环内调用的函数动态填充。
我不完全确定这是否被允许,但我已经尝试通过以下方式实现它:
#define NUM 6
vector<vector<vector<double> > > foo;
foo.resize(NUM);
for(int j1=0; j1 < NUM; j1++){
foo[j1].resize(NUM);
}
while(<condition>){
fun(foo);
}
我将函数 fun 声明为
void fun(vector<vector<vector<double> > >& foo){
for(int j1=0; j1<NUM; j1++){
for(int j2=j1+1; j2<NUM; j2++){
if(<condition>){
foo[j1][j2].push_back(<value>);
}
}
}
}
我最初测试了 NUM 等于 5 并且一切看起来都很好,但是当我尝试将其更改为 6 时,我遇到了分段错误。
我已经看到,即使我不尝试用 push_back 填充第三维(即我注释 push_back 行),对以 foo 作为参数的函数的简单调用也会弄乱 foo 的维度,即如果我插入一个
cout << foo.size() << endl;
在 while 循环中,我看到 foo 的维度在第一次迭代后发生了变化,从 NUM 变为随机数。
我还发现这取决于平台,因为我在 Linux Ubuntu 上遇到错误,但在 MacOSX 上却没有。所以我想我在做一些与内存分配有关的真正错误的事情,但我不知道到底是什么。有人可以向我解释一下吗?
谢谢您的帮助!