2012-10-10 135 views
1

一個陣列I具有的typedef結構的陣列。訪問在函數C

它被聲明爲這樣:

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); 
      } 

}

但是,我得到了一個在功能賽格故障:

in walk (vertexArray=Cannot access memory at address 0x7fffff3fefe8 

我相信這與我傳遞vertexArray的方式做。

這是我的理解,數組實際上是指針,因此vertex *vertexArray,然後單個成員只是一個頂點,而不是指針,因此vertex v

如果有人可以幫助我得到這個正確傳遞,我會感激。

側面說明,如果任何人都可以告訴我,如果步行看起來會正常工作,這是一個加分!

+3

數組是不實際的指針。他們有一些相似之處,但兩者不可互換。有些人稱他們爲常數指針,但我認爲這是一個誤用,會導致混淆。數組是數組。 –

+0

@DavidTitarenco就這樣說,有沒有辦法像C一樣傳遞我的數組呢? – ZAX

+0

有無數的資源概述瞭如何在C(++)中傳遞數組。例如,看到http://stackoverflow.com/questions/2559896/how-are-arrays-passed –

回答

2

數組是不一樣的指針。

閱讀澄清以下鏈接:

問:什麼是用C指針和數組'的``等價是什麼意思?

http://c-faq.com/aryptr/aryptrequiv.html

問:但是我聽說一個字符[]是相同的char *之一。

http://c-faq.com/aryptr/aryptr2.html

爲了避免賽格故障,添加以下檢查行走()函數:

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); 
      }