2017-03-27 13 views
0

リストから最初の要素をポップしようとしているときにも簡単なリンク済みリストプログラムを作成しようとしていましたが、ポップしていません。このエラーを解決するのを手伝ってください。別の関数に送信した後にポインタが更新されない

ここに必要なファイルとメインコードがあります。おかげさまで

stack.c stack.h

char pop(stack *s){ 
    if(s == NULL){ 
     isEmpty(s); 
     return -1; 
    } 
    char x=s->value; 
    s=(s->next); 
    return x; 
} 
+3

コードを関連する*問題のみに絞ってみてください(主な問題ではない)。リンクされたファイルの(関連する)コードも含めてください。 [mcve](https://stackoverflow.com/help/mcve)を参照してください。 – Evert

+0

プログラムの先頭で 's'を' NULL'に初期化することはありません。それは問題かもしれません。 – Evert

+2

[mcve]をお読みください。 – melpomene

答えて

2

エラーがgetsize機能に次の行にあります。ここ

while((temp->next) != NULL){

temp他のポインタの値で初期化されたポインタでありますs。 (tempとsは同じアドレスを指します)。しかし、getsizeに渡す前に、sにメモリを割り当てていません。したがって、nextメンバーにアクセスすると、segaultが発生します。

ソリューション

ユーザーにあなたのstackを操作するための選択肢を与える前に、十分なメモリを初期化します。 stack.cには、スタックにメモリを割り当てるcreate関数があります。しかし、あなたはその機能を呼んでいません。エラーを修正するには、プログラムの最初にcreateに電話してください。

また、.cファイルを含めないでください。代わりにヘッダファイル* .hをインクルードする必要があります。 (良い習慣として)。

+0

それは動作しませんでした、私は問題が作成関数にあると思う、誰かがそれは値の関数で呼び出していることを言っているが、それは値で呼び出すことができるようにポインタですので、問題がある –

関連する問題