VS2019图的深度遍历,引发了异常: 读取访问权限冲突。


#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef struct arcnode {
    int adjvex;
    arcnode* nextarc;
}arcnode;


typedef struct vnode {
    char data;
    arcnode* firstarc;
}vnode,adjlist[100];

typedef struct {
    adjlist vertices;
    int arcnum, vexnum;
}algraph;

int locate(algraph a, char o) {
    int i;
    for (i = 0; i < a.vexnum; i++)
        if (a.vertices[i].data == o)return i;
}

/*void init(algraph* &a) {
    a = new algraph;
    a->arcnum = 0;
    a->vexnum = 0;
}*/

void creatgraph(algraph &a) {
    int i, j, k;
    char m, n;
    //init(a);
    printf("请输入点的个数\n");
    scanf_s("%d", &a.vexnum);
    printf("请输入边的个数\n");
    scanf_s("%d", &a.arcnum);
    printf("请输入各个边\n");
    for (i = 0; i < a.vexnum; i++)
    {
        scanf_s(" %c", &a.vertices[i].data);
        a.vertices[i].firstarc = NULL;
    }
    

    printf("请输入各边邻接的两个点\n");
    for (i = 0; i < a.arcnum; i++) {
        scanf_s(" %c%c",&m,&n);
        //scanf_s("%c",&n,sizeof(char));
        j = locate(a, m);
        k = locate(a, n);
        //printf("%d", j);
        arcnode* b;
        b = new arcnode;
        b->adjvex = k;
        b->nextarc = a.vertices[j].firstarc;
        a.vertices[j].firstarc = b;
    }


}

int visited[100] = { 0 };

//void dfs(algraph a, char v) {
//    int i;
//    i = locate(a, v);
//    printf("%c", v);
//    visited[i] = 1;
//    arcnode*p = a.vertices[i].firstarc;
//    while (p) {
//        v =a.vertices[p->adjvex].data;
//        if(!visited[locate(a,v)])dfs(a, v);
//        p = p->nextarc;
//    }
//}


void dfs(algraph a, int v) {
    printf("%c", a.vertices[v].data);
    visited[v] = 1;
    arcnode* p;
        p = a.vertices[v].firstarc;
    while (p) {
        if (visited[p->adjvex] == 0)dfs(a, p->adjvex);
        p = p->nextarc;
    }
}

int main() {
    algraph c;
    creatgraph(c);
    int i;
    printf("请输入从哪个顶点开始:\n");
    scanf_s("%d", &i);
    dfs(c,i);
}

img


这个指针P怎么回事呀,我不是都初始化了吗,求指教!

能调试解决吗