Как решить проблему получения значения мусора на вершине стека C ++? - PullRequest
0 голосов
/ 14 декабря 2018

Это код для определения положения несбалансированной скобки в заданном входе.Если нет несбалансированной скобки, то вывод - Успех.При выводе вершины стека я получаю значения мусора в C ++.Как этого избежать?Почему это происходит?Здесь Bracket - это структура, которая содержит положение элемента и тип элемента.

int main() {
    std::string text;
    getline(std::cin, text);

    stack <Bracket> opening_brackets_stack;

    for (int position = 0; position < text.length(); ++position) {
        char next = text[position];
        if (next == '(' || next == '[' || next == '{') {
            Bracket *l1 = new Bracket(next, position + 1);
            opening_brackets_stack.push(*l1);
            cout<<opening_brackets_stack.top().type<<" " 
                <<opening_brackets_stack.top().position<<endl;          
        }
    }
}

Здесь представлено объявление Bracket

 struct Bracket 
 {
 char type;
 int position;

 Bracket(char type, int position) 
 {
    type =type;
    position=position;
 } 

bool Matchc(char c) {
    if (type == '[' && c == ']')
        return true;
    if (type == '{' && c == '}')
        return true;
    if (type == '(' && c == ')')
        return true;
    return false;
}


};

1 Ответ

0 голосов
/ 14 декабря 2018

Есть пара проблем с вашим кодом, но чтобы разобраться, в чем конкретно ваши проблемы.Он присваивает локальные переменные себе, а не членам данных.Измените

Bracket(char type, int position) 
 {
    type =type;
    position=position;
 } 

на

Bracket(char type, int position) 
 {
    this->type =type;
    this->position=position;
 } 

или используйте списки инициализаторов и различные имена

Bracket(char in_type, int in_position)
: type(in_type)
, position(in_position)
{
} 

У вас также есть утечка памяти здесь

Bracket *l1 = new Bracket(next, position + 1);
opening_brackets_stack.push(*l1);

это лучше написать с автоматической продолжительностью хранения как

Bracket l1{next, position + 1};
opening_brackets_stack.push(l1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...