2017-05-24 43 views
-4

我已經從編程類的代碼:C++有問題的功能,數組列表

void ToList(List *first, int *arr, int n) { 
    List *p = first; 
    for(int i=0; i<n; i++) { 
     p->x = arr[i]; 
     if (p->next != NULL) p = p->next; 
    } 
} 

我把它以一個陣列元件轉移至列表:

int main() { 

const int N = 10; 
int m[N] = {5, 8, 1, 7, 2, 6, 9, 4, 0, 3}; 

List *first = NULL; 

ToList(first, m, N); 
PrintList(first); 

我有一個「分段錯誤「 - 程序以退出代碼139結束。什麼是錯誤的,它如何被修復?

+6

歡迎來到Stack Overflow。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。 –

+3

您的列表('first')爲'NULL',並且您從未爲其分配任何內存 – Alexander

+3

解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,你應該[編輯]你的問題,以包含一個[Minimal,Complete,and Verifiable](http://stackoverflow.com/help/mcve)例子來重現你的問題,以及你在調試器中所做的觀察。 –

回答

1

它看起來像取消引用指針NULL

main

List *first = NULL; 

ToList

List *p = first; // first = NULL 
... 
p->x = arr[i] 

所以,你需要首先分配名單。