c ++ // 4d <vector>处的分段错误

时间:2016-04-13 17:44:33

标签: c++ vector segmentation-fault

所以这是我在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) 

分段错误发生在(对我来说)随机迭代上。 如果有人知道可能是什么问题,我会很高兴。

0 个答案:

没有答案