我有一个typedef结构数组。
声明如下:
vertex vertexArray[numberVertices];
然后我在主代码中有这个:
for(i=0;i<numberVertices;i++)
{
if(vertexArray[i].source == 5)
{
source = vertexArray[i].number;
walk(vertexArray, vertexArray[i], source, headMaxPairList );
}
}
希望能够进行散步:
void walk(vertex *vertexArray, vertex v, int source, maxPairing *head)
{
int i;
adjEdge *traverse;
int moveVertex;
int sink;
moveVertex = vertexArray[v.number-1].number;
if(vertexArray[moveVertex-1].color != 5 && vertexArray[moveVertex-1].sink == 5)
{
sink = vertexArray[moveVertex-1].number;
vertexArray[moveVertex-1].color = 5;
addMaxPair(head, source, sink);
}
else
{
walk(vertexArray, vertexArray[moveVertex-1], source, head);
}
}
但是,我在函数上遇到了一个seg-fault:
in walk (vertexArray=Cannot access memory at address 0x7fffff3fefe8
我认为这与我传递vertexArray的方式有关。
我理解数组实际上是指针,因此vertex *vertexArray
然后单个成员只是一个顶点,而不是指针vertex v
。
如果有人能帮助我正确传递,我会很感激。
旁注,如果有人能说出我的步行看起来是否能正常工作那么多了!
答案 0 :(得分:2)
数组与指针不同。
请阅读以下链接以获得澄清:
问:那么C中的“指针和数组的等价”是什么意思?http://c-faq.com/aryptr/aryptrequiv.html
问:但我听说char a []与char * a相同。http://c-faq.com/aryptr/aryptr2.html
要避免Seg-Fault,请将以下检查添加到walk()函数:
void walk(vertex *vertexArray, vertex v, int source, maxPairing *head)
{
int i;
adjEdge *traverse;
int moveVertex;
int sink;
/* Add this Check to Avoid Seg Fault, you need to make the value of
'numberVertices'available to this function as this is your array size */
if ((((v.number-1)<0)||((v.number-1)>numberVertices))
{
return;
}
/* Check Ends */
moveVertex = vertexArray[v.number-1].number;
/* Another Check */
if((moveVertex-1<0)||(moveVertex-1>numberVertices))
{
return;
}
/* Check Ends */
if(vertexArray[moveVertex-1].color != 5 && vertexArray[moveVertex-1].sink == 5)
{
sink = vertexArray[moveVertex-1].number;
vertexArray[moveVertex-1].color = 5;
addMaxPair(head, source, sink);
}
else
{
walk(vertexArray, vertexArray[moveVertex-1], source, head);
}