2017-10-13 1 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'; 
}