【问题标题】:Crash when accessing matrix in C++在 C++ 中访问矩阵时崩溃
【发布时间】:2010-12-07 07:41:15
【问题描述】:

我正在尝试创建一个二维数组来表示加权图。为了制作矩阵,我正在制作一个数组数组,如下面的构造函数所示。该矩阵将存储连接两个节点的边的权重。例如 graph[1][2] 将存储点 1 和 2 之间的边的权重。

Weighted_graph::Weighted_graph( int n ):vertices(n){
double **graph= new double *[vertices];
nodeDegree=new int [n];
edges=0;
for (int c=0;c<vertices;c++)
{       
    graph[c] = new double[vertices];
    nodeDegree[c]=0;    
    for (int d=0;d<vertices;d++)
    {   
        graph[c][d]=INF;
    }   
}

}

图形定义为double **graph;

这似乎有效,直到我尝试从其他函数访问变量图,此时程序崩溃。 (INF 在代码中进一步定义)。

【问题讨论】:

  • 没有足够的信息来回答这个问题。您还需要显示实际崩溃的代码。但是,乍一看,double** 图形在此函数中定义并且从未返回。其他函数如何知道您分配给它的值是什么?
  • patrosFritschy 的意思是,其他变量没有访问这个名为graph 的特定变量,其范围仅限于所示的构造函数。他们可能正在访问其他同名变量,但它仍然是不同的变量。

标签: c++ matrix


【解决方案1】:

我假设您正在引用您正在构建的对象的图形成员。但是,graph 在此处被声明为局部变量。

【讨论】:

  • 是的,这是一个范围问题。谢谢
【解决方案2】:

这都是关于范围的,因为你在一个函数中你可以重用一个变量名,但是这个变量名只能在讲师中访问。删除构造函数中graph前面的double**。

【讨论】:

    【解决方案3】:

    不要重新发明轮子。使用boost::multi_array

    【讨论】:

    • 这是一个学校项目,我不得不这样做。
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2018-05-06
    相关资源
    最近更新 更多