所以这是我在stackoverflow上的第一个问题,但你们已经帮了我很多。
我在grid.h文件中创建了一个4d向量
class Grid{
public:
Grid(Params *);
~Grid();
void Set_Cube();
void Add2Grid(SPH_Part *);
int getSize(int, int, int);
vector<vector<vector<vector<SPH_Part> > > > grid;
Params *param;
};
然后我将它调整为grid.cpp中的100 X 100 X 100
void Grid::Set_Cube(){
#define HEIGHT 2*param->Ref
#define WIDTH 2*param->Ref
#define DEPTH 2*param->Ref
grid.resize(HEIGHT);
for (int i = 0; i < HEIGHT; ++i) {
grid[i].resize(WIDTH);
for (int j = 0; j < WIDTH; ++j)
grid[i][j].resize(DEPTH);
}
}
}
用结构填充第4个暗淡
void Grid::Add2Grid(SPH_Part *part){
for (int j=0; j< param->Npart; ++j) {
//.....code....//
grid[part[j].cube[0]][part[j].cube[1]]part[j].cube[2]].push_back(part[j]);
}
... 在这里,我仍然可以访问整个矢量 ...
for (int i=0; i< 21; ++i) {
for (int j=0; j< 75; ++j) {
for (int k=0; k< 36; ++k) {
cout<< grid[i][j][k].size() << " " << i << " " << j << " " << k << endl;
}
}
}
return;
}
但是如果我之后通过getter函数从代码中的某个地方打电话(它既不能直接访问)又会出现分段错误。
int Grid::getSize(int i, int j, int k){
cout << "grid " << i << " "<< j << " "<< k << " "<< endl;
cout << "grid " << grid[i][j][k].size() << endl;
return grid[i][j][k].size();
}
GDB给了我:
grid 20 74 35
Program received signal SIGSEGV, Segmentation fault.
0x00000000004032c8 in Grid::getSize(int, int, int) ()
(gdb)
分段错误发生在(对我来说)随机迭代上。 如果有人知道可能是什么问题,我会很高兴。