不练成理想中的身材不改名 2019-06-12 00:39 采纳率: 0%
浏览 605

Decv++调试报错 program received signal SIGSEGV,Segmentation fault

图片说明图片说明图片说明

小白写数据结构中 用邻接表表示图并输出中 在调试界面出现了问题
program received signal SIGSEGV,Segmentation fault
并不是很懂

#include<iostream>
#include<stdio.h>
#define MVNum 100                           
typedef struct ArcNode  //边节点 
{                       
    int adjvex;                                 
    struct ArcNode * nextarc;                                                  
}ArcNode;

typedef struct VNode    //顶点节点 
{ 
    char data;                       
    ArcNode * firstarc;                 
}VNode, AdjList[MVNum];              

typedef struct                 //邻接表 
{ 
    AdjList vertices;                       
    int vexnum, arcnum;                     
}ALGraph; 


int LocateVex(ALGraph N,char v)
{
    int i;
    for(i=0;i<N.vexnum;i++)
    {
        if(N.vertices[i].data==v)
        return i;
    }
}


int CreateUDG(ALGraph &G)
{
    int i,j,k,v1,v2;
    ArcNode *p1,*p2;
    std::cin>>G.vexnum>>G.arcnum;
    for(i=0;i<G.vexnum;i++)
    {
    std::cin>>G.vertices[i].data;
    G.vertices[i].firstarc=NULL;  
    }//顶点节点(4个)全部排在了数组里面; 
    for(k=0;k<G.arcnum;k++)
    {
       std::cin>>v1>>v2;
       i=LocateVex(G,v1);
       j=LocateVex(G,v2);
       p1=new ArcNode;
       p1->adjvex=j;
       p1->nextarc=G.vertices[i].firstarc;
       G.vertices[i].firstarc=p1;
       p2->adjvex=i;
       p2->nextarc=G.vertices[j].firstarc;
       G.vertices[j].firstarc=p1;
    }   
}

int main()
{
    int i;
    ALGraph G;
    ALGraph *p;
    ArcNode *pp; 
    CreateUDG(G);
    for(i=0;i<G.vexnum;i++)
    {
        std::cout<<p->vertices[i].data;
        std::cout<<"->";
        pp=p->vertices[i].firstarc;
        do
        {
        std::cout<<pp->adjvex;
        pp=pp->nextarc;
        }while(pp==NULL);
    printf("\n");
    }

}

展开全部

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-09 23:26
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码是用于创建一个有向图,并通过邻接表存储顶点信息。程序的主要功能是在主函数main()中读取用户输入的数据,并将其转换成邻接表。

    在这个过程中,程序会遇到一个问题,即在输出时出现错误。具体来说,程序在输出顶点时遇到了错误。这可能是由于在处理输出过程中的某个部分出了问题,例如,在输出顶点或边的过程中,可能没有正确地将顶点或边连接起来。

    要解决这个问题,我们需要仔细检查程序中所有涉及到输出的部分,确保它们按照预期的方式工作。首先,我们可以通过打印一些中间变量来观察程序的行为,看看是否有任何异常发生。然后,我们可以逐步检查程序的逻辑,以确定哪些部分可能会导致问题。

    以下是一些可能的问题和解决方案:

    1. 错误的输出格式:程序中可能没有正确设置输出格式。检查输出格式是否符合你的需求,或者尝试使用不同的输出格式。
    2. 不正确的邻接表链接:检查邻接表的链接是否正确。确保每个顶点都有一个指向它的邻接表链表,并且相邻的两个顶点之间有一个正确的边关系。
    3. 未定义的行为:如果程序在某些情况下没有按预期的行为,那么你需要找出这些情况,并修复它们。例如,如果你在处理边的时候发生了错误,那么你可能需要修改程序以确保所有的边都能被正确地创建和链接。
    4. 边界条件检查:检查程序在输入数据边缘的情况下的行为。例如,如果输入的数据超过了允许的最大值,或者如果输入的边的数量超过最大数量,那么程序应该能够处理这种情况而不崩溃。

    总之,为了找到和解决问题,你需要仔细阅读和理解代码,注意其逻辑流程,并进行测试。此外,保持对程序的调试习惯也很重要,这样可以帮助你在出现问题时更快地定位问题所在。

    评论
    编辑
    预览

    报告相同问题?

    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部