0
class node{
  int data;

  public:
  node *next;
  node *prev;
  node(int a){data=a; next=NULL; prev=NULL;}
  int retrieve(){return data;}
};

class stack{
  node *top;
  public:
  stack(){top=NULL;}
  void push(node);
  bool empty();
  void printall();
};


void stack::push(node a){
  if(top==NULL)
    top=&a;
  else{
    top->next=&a;
    top->next->prev=top;
    top=&a;
  }
}

int main(){
  stack st;
  cout<<st.empty()<<endl;
  node k(3);
  node j(4);
  node h(5);
  st.push(k);
  st.push(j);
  st.push(h);
  st.printall();  
}

バグはプッシュ機能で発生します。

プッシュ関数のすぐ内側で gdb を使用して top 値をトレースすると、top の値がすぐにノード a に変わります。

メイン関数にはスタック インスタンスが 1 つしかないため、トップが 1 つしかないため、新しい値を割り当てるまで同じ値を保持する必要があります。右?

誰かヒントをくれませんか?

(ところで、すべてを入力する代わりに、コードの前に 4 つのスペースを追加する方法はありますか?)

4

1 に答える 1

1

stack::push(node a)

node x; 
/* other things*/
You wil call this as push(x); 

値渡しを行っています。おそらくそれが問題を引き起こしています。

top=&a;仮パラメータのアドレスを格納します。push 関数を終了すると、変数は破棄されます。

于 2013-03-29T07:06:08.470 に答える