2017-05-24 6 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); 

私は "ですSegmentation fault " - プログラムは終了コード139で終了しました。何が間違っていて、どのように修正できますか? main

ToList

List *first = NULL; 

+6

ようこそスタックオーバーフロー。 [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/)を参照してください。少なくとも、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、デバッガでの観察結果を含めるように質問を編集する必要があります。 –

答えて

1

それはNULLポインタデリファレンスあなたのように見えます

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

だから、あなたが最初にリストを割り当てる必要があります。