我想修改一个
vector <vector <double>>
在另一个函数中从main()
中声明。
我将指向向量的指针作为函数参数传递;不幸的是,一旦我尝试修改向量,就会出现段错误。
最初这是我的代码:
#include <vector>
#include <iostream>
using namespace std;
void function(vector <vector <double>> *result, int k){
double r = 0.2;
for(int i=0;i<5;i++){
r = r*0.2;
result[k][i].push_back(r);
}
}
int main(){
vector <vector <double>> result;
for(int i=0;i<5;i++) function(&result, i);
for(int i=0;i<5;i++){
for(int j=0;j<5;j++) cout << result[i][j] << " ";
cout << " " << endl;
}
return 0;
}
使用"g++"编译没有问题,但运行程序时出现了分段错误。
我认为问题在于使用operator[]时应用到了指针上,所以我可能需要类似这样的东西:
result->operator[](k)->operator[](i).push_back(r);
我尝试编译以下代码,但不幸的是无法通过。
编辑: 我在result[k][i]上使用了“push_back()”,而其是一个double类型。
我进行了修改:
result[k][i].push_back(r);
在:
res[k][i]=r;
但我仍然遇到分段错误 :/
编辑2: 问题在于向量的向量声明上; 我没有指定大小。应该像这样:
vector <vector <double>> result(int size);
in main():
不行。建议提供一个 [mcve]。 - Jesper Juhlres[k]
,但这只有在k == 0
的时候才是正确的。好好想一想,记住res
到底代表什么意思... - Some programmer dudemain
中的result
为空。 - 1201ProgramAlarm