2012-11-17 56 views
2

我在寫一個二十一點程序時遇到了處理函數的問題。任何人都可以看到發生了什麼?當我嘗試在main()中打印時,出現分段錯誤。C - 初始化動態列表時出現問題

乾杯。

主要功能

int main(void) 
{ 
    int i, j, k, purse; 
    card deck[52]; 
    card *head_d, *temp_d, *current_d = NULL, *last_d, *head_p, *temp_p, *current_p = NULL, *last_p; 



make(deck); //CREATES THE DECK 
shuffle(deck); //SHUFFLES THE DECK 
deal(deck, head_d, current_d, head_p, current_p) 

for(i = 0; i < DECK_SIZE; i++) 
    { 
     printf("%d: %d %c\n", i + 1, deck[i].face, deck[i].suit); 
    } 

temp_p = head_p; 
while(temp_p != NULL) 
{ 
printf("%d %c\n", temp_p->face, temp_p->suit); 
temp_p = temp_p->listp; 
} 

return(0); 
} 

功能的交易()

void deal(card x[DECK_SIZE], card *head_d, card *current_d, card *head_p, card *current_p) 
    { 

    int i; 
    card *temp_p, *temp_d; 

    for(i = 0; i < 4; i++) 
    { 
     if(i % 2 == 0) 
     { 
      temp_p = (card *)malloc(sizeof(card)); 
      temp_p->face = x[i].face; 
      temp_p->suit = x[i].suit; 

      if (current_p==NULL) 
      { 
       head_p=temp_p; 
      } 
      else 
      { 
       current_p->listp=temp_p; 
      } 
       current_p = temp_p; 
       temp_p->listp = NULL; 

     } 
     else 
     { 
      temp_d=(card *)malloc(sizeof(card)); 
      temp_d->face = x[i].face; 
      temp_d->suit = x[i].suit; 

      if (current_d==NULL) 
      { 
       head_d=temp_d; 
      } 
      else 
      { 
       current_d->listp=temp_d; 
      } 
       current_d = temp_d; 
       temp_d->listp = NULL; 
     } 
    } 
} 
+0

也許它會很有用,如果你也發佈你的主要功能,你得到分段錯誤..或者你可能調用交易(...)功能。 –

回答

2

的問題是,該參數的deal功能當地,當你在函數改變它們的價值意思,調用函數時使用的變量不會被更改。您需要通過參考來傳遞這些參數

void deal(card x[DECK_SIZE], card **head_d, card **current_d, card **head_p, card **current_p); 

的做如

*head_p=temp_p; 
在功能

設置變量。

呼叫作爲

deal(deck, &head_d, &current_d, &head_p, &current_p); 
+0

您能否詳細說明一下。我需要在main中聲明** head_d嗎?或者我可以只通過我已經聲明的指針? – tyson

+0

@tyson是的,你將指針作爲指針傳遞給指向運算符「&」的地址的指針。我已經更新了我的答案。 –

+0

謝謝!我將不得不盯着代碼一段時間來圍繞它。最後一個問題:在我做了編輯之後,我得到的唯一錯誤是'162:請求成員'listp'的東西不是結構或聯合體。'你能做出正面還是反面? – tyson

0

您的main功能未初始化的指針變量head_p。然而,你正試圖讀取head_p所指的數據。當然,你會得到段錯誤。

+0

我試圖在函數deal()中進行初始化。 – tyson