(萌新小白,错误记录,非经验总结,非解决方法)
尝试自己用C敲图的邻接表结构及其创建,在写完后编译器报错“Program received signal SIGSEGV,Segmentation fault”
代码如下:

int CreateALG(ALGraph &A)
{
AdjList* p=NULL;
ArcNode* q=NULL;
A.vexnum=5;
A.arcnum=5;
q=A.vertices->firstarc;
p=(AdjList*)malloc(sizeof(VNode)*A.vexnum);
if(!p)
return ERROR;
else
{
for(int i=0;i<A.vexnum;i++)
{
printf("Please enter the data of the vex.\n");
scanf("%d",&A.vertices[i].data);
printf("%d\n",A.vertices[i].data);
}
for(int j=0;j<A.vexnum;j++)
{
printf("Please enter the adjvex,0 means the NULL.\n");
int a;
scanf("%d",&a); //读入一个字符
printf("%d",a);
if(a!=0)
{
q->adjvex=a;
printf("%d",q->adjvex);
}//if
}//for
}//else
return OK;
}//CreateALG
int main()
{
ALGraph A1;
CreateALG(A1);
return 0;
}
后经过查其他博客,这个报错是指程序中有野指针。(也有博客说可以通过断点可以找到错误,但是我还没有仔细研究过这个断点怎么用,so......就先不写相关的内容)经过思考后发现应该是这里出了问题:
if(a!=0)
{
q->adjvex=a;
printf("%d",q->adjvex);
}//if
这个q指针是用来指向头结点数组的指针,之后我又将其赋值为头结点后接的结点,造成了指针越界。 (也不知道对不对,如果有大神看到有什么问题,欢迎指出,感激不尽)
解决办法:重新申请一个指向后接结点的指针对结点进行赋值,这个指针可以通过原有的q指针来进行定位。
(好像这个社区不能写这样的文章......暂且记下,被删再说,手下留情)