请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么程序运行结束了应该return 0的时候反而崩溃了

最后return 0的时候程序却崩溃了是什么情况。析构函数我也检查过好像没有问题。

下面是Prim的代码:

#ifndef PRIM_H_INCLUDED
#define PRIM_H_INCLUDED

#include "Edge.h"
#include "MinIndexHeap2.h"
#include <vector>
using namespace std;

template <class Graph, class Value>
class Prim
{
    Graph G;
    bool *visited;
    MIHeap2<Value> heap;
    vector<Edge<Value>* > edgeto;
    vector<Edge<Value> > vec;
    Value minw;

    void prim( int i )
    {
        class Graph::Iterator ite( G, i );
        Edge<Value> *p; int j;
        visited[i] = true;
        for( p=ite.begin() ; !ite.end(); p=ite.next() )
        {
            j=p->other(i);
            if( !visited[j] )
            {
                if( !edgeto[j] )
                {
                    heap.insert( j, p->val() );
                    edgeto[j] = p;
                }
                else if( p->val() < heap[j] )
                {
                    heap.change( j, p->val() );
                    edgeto[j] = p;
                }
            }
        }
    }

public:
    Prim( Graph& g, int v ):
    G(g), heap(v), vec(v-1)
    {
        int i,tmp;
        visited = new bool[v];
        for( i=0 ; i<v ; i++ )
        {
            visited[i] = false;
            edgeto.push_back(NULL);
        }
        vec.clear();
        prim(0);
        while( !heap.isEmpty() )
        {
            tmp = heap.popindex();
            vec.push_back( *edgeto[tmp] );
            prim(tmp);
        }
        minw=vec[0].val();
        for( i=1 ; i<vec.size() ; i++)
            minw+=vec[i].val();
    }
    ~Prim(){ delete []visited; }
    void min_path( vector<Edge<Value> >& vec_s ){ vec_s = vec; }
    Value min_weight() { return minw; }
};

#endif // PRIM_H_INCLUDED

不调用这个Prim的时候return 0不会崩溃。包括单独使用最小堆。有了这个Prim在return 0的时候就会崩溃。

正在回答

1回答

哪里有return 0? 看看能不能提供更完整的代码?或者按照如下思路debug自己的代码:


看看运行课程的官方代码是否崩溃?如果不崩溃,一点一点在官方代码的基础上添加你定制化的代码,看看从什么时候开始发生了错误,再深入研究这部分为什么会导致错误?比如,先将运行无误的最小堆替换成你的最小堆,看是否有错误?再将运行无误的有权图替换成你的有权图,以此类推。


出现错误,debug的核心是首先定位错误的代码片段到底在哪里。通常只看看结果,尤其是这种大的结果,比如,我的程序崩溃了,是对解决错误没有帮助的。debug是每一位从事计算机职业的基本功,以后你就会发现,其实80%的时间不是写程序,而是debug程序。


加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 易萧 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2017-07-13 09:12:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信