Я постараюсь быть кратким, как могу, не вдаваясь в подробности здесь. Программа, которую я пишу, включает создание 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, но я не использовал ни одну из них в этой программе. Надеюсь, этот вопрос не слишком длинный. Я могу предоставить больше информации, если вы считаете, что это необходимо для решения проблемы.