数据结构-图-邻接表-C-Program received signal SIGSEGV,Segmentation fault问题

258 阅读1分钟

(萌新小白,错误记录,非经验总结,非解决方法)

尝试自己用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指针来进行定位。

(好像这个社区不能写这样的文章......暂且记下,被删再说,手下留情)