munmap_chunk (): ошибка неверного указателя с трехмерной сеткой векторов - PullRequest
0 голосов
/ 11 марта 2019

Я постараюсь быть кратким, как могу, не вдаваясь в подробности здесь. Программа, которую я пишу, включает создание 3D-сетки. Сетка состоит из объектов класса Cube, где каждый куб содержит несколько переменных, представляющих эту часть сетки:

class Cube{
  public:
    double var1, var2, var3;

    Cube();
};

Я генерирую сетку в функции, используя векторы:

class PlasmaGrid{
  public:
    vector<vector<vector<Cube>>> construct_grid();
    void assign_background(vector<vector<vector<Cube>>> &grid);
};

vector<vector<vector<Cube>>> PlasmaGrid::construct_grid(){

    vector<vector<vector<Cube>>> grid(input_file.num_rad_bins,
                                      vector<vector<Cube>>(input_file.num_pol_bins,
                                      vector<Cube>(input_file.num_par_bins, Cube())));

    return grid

void PlasmaGrid::assign_background(vector<vector<vector<Cube>>> &grid){

    // loop through the grid to fill in variables...
}

Где я вызываю их из отдельного файла в строках:

vector<vector<vector<Cube>>> grid;
grid = plasma_grid.construct_grid();
plasma_grid.assign_background(grid);

Наконец, позже,

Cube get_my_cube(vector<vector<vector<Cube>>> &grid){

// Do some stuff that isn't relevant to the question...

return grid[index1][index2][index3];
}

Cube cube = get_my_cube(grid);

Теперь проблема в том, что когда я запускаю, я получаю сообщение об ошибке:

munmap_chunk(): invalid pointer
Aborted (core dumped)

, которую я проследил до строки, в которой я возвращаю сетку [index1] [index2] [index3] (то есть объект Cube) и назначаю его кубу.

Код работает до конца в valgrind, хотя кажется, что он говорит мне, что у меня проблема с утечкой памяти. Большая часть информации, которую я могу найти об утечках памяти, связана с использованием new и delete, но я не использовал ни одну из них в этой программе. Надеюсь, этот вопрос не слишком длинный. Я могу предоставить больше информации, если вы считаете, что это необходимо для решения проблемы.

...