【发布时间】:2020-11-24 22:02:41
【问题描述】:
我想在我的 .hpp 文件中创建一个填充矩阵作为实例变量,但最终会出现段错误。
我有一个石墨课。 在我的 .cpp 文件中,我填写了一个邻接矩阵,如下所示
void Graphe::shortRoute( void ){
std::vector<vector<int>> matrix(_adjacences.size(), vector<int>(_adjacences.size()));
std::vector<vector<int>> shortPath(_adjacences.size(), vector<int>(_adjacences.size()));
for (unsigned i = 0; i < _adjacences.size(); i++) {
for (auto j : *_adjacences[i]) {
matrix[i][j->sommetArrive] = j->longueur;
}
}
... more and more code to get a filled shortPath matrix.
我实现了 Floyd 算法,这里一切正常 我打印了矩阵来检查它,一切都很好。
我想将结果矩阵 matrix 和 shortPath 作为实例变量
我尝试如下 THIS CAUSES SEG FAULT WHY ?
for ( unsigned i = 0; i < _adjacences.size(); i++)
for (unsigned j = 0; j < _adjacences.size(); j++){
shortPath[i][j] = SP[i][j];
matrix[i][j] = M[i][j];
}
在我的 .hpp 文件中,我声明 SP 和 M 如下:
class Graphe
{
private:
vector< vector< Arc * > * > _adjacences;
std::vector<vector<int>> M;
std::vector<vector<int>> SP;
....
一旦我启动程序,我就会从那个新增功能中得到 seg 错误
圆弧如下:
class Arc
{
public:
int sommetArrive;
int longueur;
string nom;
Arc( int a_sommetArrive, int a_longueur, string a_nom );
virtual ~Arc( void );
friend ostream & operator <<( ostream &, Arc const & );
};
【问题讨论】:
-
一旦您引入了指针,我们需要了解这些指针在何处、如何以及何时被初始化。
-
当您几个小时前提出这个问题时,我们要求您提供minimal reproducible example,以便我们可以真正帮助您。即使您删除了原始问题,这仍然适用。干杯
-
我没有理解最小示例的含义,我无法创建示例,因为我的程序从 XML 文件中读取值并指向它们,这就是为什么 :(
-
我有 2 个用 int 填充的矩阵,如何将它们作为我的 Graphe 类中的实例变量?这是我的问题
-
@KingAzaiez 不是您要问的,但是此代码
for ( unsigned i = 0; i < _adjacences.size(); i++) for (unsigned j = 0; j < _adjacences.size(); j++){ shortPath[i][j] = SP[i][j]; matrix[i][j] = M[i][j]; }可以简化为此shortPath = SP; matrix = M;您不必编写循环来复制向量,整个向量可以复制到一个单一任务。我怀疑这甚至可以解决你的问题。
标签: c++ matrix vector segmentation-fault adjacency-matrix