i'm написать код, для которого я использую трехмерный boost multiarray для сохранения координат. Но в какой-то момент я всегда получаю ошибку сегрегации. Как ограничить размеры multiarray и как я могу обойти эти ограничения?boost multiarray segementation fault
Вот упрощенный тестовый код, который воспроизводит проблему:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
#include <boost/multi_array.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>
#include "Line.h"
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
typedef struct {
Eigen::Vector3d coords;
int gpHostZone;
int gpHostFace;
int calculated;
} Vertex;
class LGR {
public:
LGR (int i, int j, int k) :
grid(boost::extents[i][j][k])
{
};
std::string name;
std::vector<int> hostZones;
std::vector<int> refine;
boost::multi_array<Vertex*, 3> grid;
std::vector<double> data;
};
int main(void){
LGR lgr(11,11,21);
std::cout << lgr.grid.size();
std::vector<LGR> v;
std::vector<Vertex> vertexDB;
for(int i = 0; i < 1; i++){
for(int j = 0; j < lgr.grid.size(); j++){
for(int k = 0; k < lgr.grid[0].size(); k++){
for(int l = 0; l < lgr.grid[0][0].size(); l++){
Vertex coord;
coord.coords << i,j,k;
coord.gpHostZone = 0;
coord.gpHostFace = 0;
coord.calculated = 0;
vertexDB.push_back(coord);
lgr.grid[j][k][l] = &(vertexDB.back());
}
}
}
for(int j = 0; j < lgr.grid.size(); j++){
for(int k = 0; k < lgr.grid[0].size(); k++){
for(int l = 0; l < lgr.grid[0][0].size(); l++){
std::cout << "At ("<< i << ","<< j << ","<< k << "," << l << ")\n";
std::cout << lgr.grid[j][k][l]->coords<<"\n\n";
}
}
}
}
return 1;
}
Пожалуйста, не прокомментировать включает. Я просто копирую и вставляю код. Большинство из них, вероятно, здесь не нужны. Размеры взяты из реального примера, поэтому мне действительно нужны такие размеры (и, вероятно, больше).
Большое спасибо ....
'lgr.grid [j] [k] [l] = & (vertexDB.back());' - Не рекомендуется хранить указатели на элементы в векторе. Если вектор становится измененным, то итераторы и указатели на предметы становятся недействительными. – PaulMcKenzie