2014-09-02 2 views
0

Имя головы файла Stack.h, как показано ниже:Почему результаты пробега как последняя строка «ошибка сегментации (ядро сбрасывало)»

#include <iostream> 
using namespace std; 

class Stack 
{ 
    struct Link 
    { 
     void* data; 
     Link* next; 
     Link(void* dat, Link* head); 
     ~Link(); 
    } *head; 

public: 
    void push(void * dat); 
    void* pop(); 
    void* peek(); 
    Stack(); 
    ~Stack(); 
}; 

Stack::Link::Link(void* dat, Link* head) 
{ 
    data = dat; 
    next = head; 
} 

Stack::Link::~Link() { } 

void Stack::push(void* dat) 
{ 
    head = new Link(dat, head); 
} 

Stack::Stack() 
{ 
    head = 0; 
} 

void* Stack::pop() 
{ 
    Link* old = head; 
    void* result = head->data; 
    head = head->next; 
    delete old; 
    return result; 
} 

void* Stack::peek() 
{ 
    if (head == 0) return 0; 
    return head->data; 
} 

Stack::~Stack() 
{ 
    if (head != 0) cout << "Stack is not empty" << endl; 
} 

// this is cpp file name as StackTest.cpp 
#include "Stack.h" 
#include <iostream> 
#include <fstream> 
using namespace std; 

int main() 
{ 
    Stack stack; 
    ifstream in("Stash.h"); 
    string line; 
    while (getline(in, line)) 
    { 
     stack.push(new string(line)); 
    } 
    string* str; 
    while (str = (string*)stack.pop()) 
    { 
     cout << *str << endl; 
     delete str; 
    } 
} 

Результата выполнения последней строку, как показано ниже:

ошибки Segmentation (ядро сбрасывали)

команда компиляции является

g++ Stash.h StashTest.cpp -o StashTest 

в Ubuntu 12.04

Почему результат запуска в качестве последней строки - Segmentation fault (core dumped)?

+0

Пройдите через основной файл с вашего отладчика сузить проблему. – 0x499602D2

ответ

2

Вы не проверять, если стек пуст в поп, поэтому он выходит из строя, пытаясь получить head-> данные, когда головка nullptr

Смежные вопросы