2016-07-02 17 views
-5
#include <iostream> 
#include <stack> 

using namespace std; 

int main() 
{ 
     stack<int> *s; 
     s->push(1); 
     cout << s->top(); 
} 

ポインタを使用してint型のスタックを挿入する方法を学習しようとしていますが、セグメンテーションフォルトが発生しています。C++でポインタを使用してスタックに挿入する方法

+3

スタック * s;を ' s;'と 's->'を 's 'にスタックするように変更してください。ポインタは、通常のユーザーコードでは必要ないエキスパート専用の機能です。 –

+0

ポインタsは、タイプスタックのデータへのポインタですが、ポインタは値に初期化されていません。したがって、データをスタックにプッシュすると、データはランダムなメモリ位置に追加されます。ランダムなメモリ位置に書き込むと、セグメンテーションフォルトが発生します。 – anneb

+0

編集は質問を完全に変更し、以下の回答を無効にしました(そして、読者に困惑させる)。これは面倒です - そうしないでください。 – chi

答えて

4

セグメント違反が発生しています。

あなたがスタックを持っていないので、これは、DESが何を指していた、積み重ねるだけ割り当てられていないポインタです。 sが新しいスタック

stack<int> *s = new stack<int>(); 

またはそれスタックではなく、ポインタ

stack<int> s; 

->オペレータの代わりにドットを使用するように割り当て、スタックを指すようにするために。

2
  1. 動的に割り当てられたSTLオブジェクトは使用しないでください。ほとんど必要ありません。例えばCで

  2. ポインタ初期化されていない来++、あなたが本当に/は、ヒープ上に割り当てられSTLオブジェクトを使用する必要がしたいならば、あなたはそれを初期化する必要があり、:stack<int>* s = new stack<int>()

  3. あなたは本当に、本当にそれらを割り当てる必要がある場合メモリを直接管理する必要がないように、std::unique_ptrを使用してください。

関連する問題