2017-10-13 11 views
0

これは私の.hppファイルからのものです。メインのダブルポインタ関数からポインタ配列を出力する

struct Item{ 
    std::string todo;}; 
const int MAX_STACK_SIZE = 5; 
class StackArray 
{ 
    public: 
     StackArray(); 
     bool isEmpty(); 
     bool isFull(); 
     void push(std::string Item); 
     void pop(); 
     Item* peek(); 
     int getStackTop() { return stackTop; } 
     Item** getStack() { return stack; } 
    private: 
     int stackTop; 
     Item* stack[MAX_STACK_SIZE]; 
}; 
#endif 

次に、私の.cppファイルの一部の機能です。

void StackArray::push(std::string Item) 
{ 
    if (isFull()) 
    { 
     cout<<"Stack full, cannot add new todo item."<<endl; 
    } 
    else 
    { 
     stackTop++; 
     Item* newStack = new Item[MAX_STACK_SIZE]; 
     newStack[stackTop].todo = Item; 
    } 
} 

私は、main.cppファイルにスタック配列を表示することについて本当に混乱しました。どうやってやるの?ここに私が持っているが、アドレスを印刷することしかできない。

int main() 
{ 
    StackArray stackArray; 
    if (stackArray.isEmpty()) 
     cout<< "Empty stack." <<endl; 
    stackArray.push("25"); 
    stackArray.push("20"); 
    stackArray.push("15"); 
    stackArray.push("10"); 

    Item**stack1=new Item*[5]; 
    *stack1=new Item; 
    stack1=stackArray.getStack(); 
    for(int i=0;i<5;i++) 
    { 
     cout<<*(stack1+i)<<endl; 
    } 
} 
+0

あなたは永久のどこにでも 'newStack'を保存することは決してありませんので、メモリがリークしています。 – Barmar

+0

なぜあなたは 'stack'に項目を追加していませんか? – Barmar

+0

'cout < todo;'おそらく実際には 'StackArray :: stack'の内容を初期化することはないので、おそらくクラッシュします。それはランダムなゴミを含んでいます。 –

答えて

1

あなたpush方法は決して実際にstackには何も追加されていません。まったく新しい配列の配列を割り当てますが、ローカル変数にのみ割り当てられます。ローカル変数は関数が終了すると消えます。項目をstackに追加する必要があります。

void TodoStackArray::push(std::string Item) 
{ 
    if (isFull()) 
    { 
     cout<<"Stack full, cannot add new todo item."<<endl; 
    } 
    else 
    { 
     stackTop++; 
     stack[stackTop] = new Item; 
     stack[stackTop]->todo = Item; 
    } 
} 

項目をプリントアウトするには、ポインタを介した間接にする必要があります。

for (int i = 0; i < 5; i++) { 
    cout << stack1[i]->todo << '\n'; 
} 
関連する問題