Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Непонятная ошибка сегментации

62K
05 августа 2010 года
Pils
2 / / 05.08.2010
В программе используется дерево, элементы которого описываются и создаются таким образом:
Код:
struct Node
{
  Node* children[8];
  int num;
  vector <pair <string, unsigned int> > words;
};

Node* create_node()
{
    Node* new_node = new Node;
    for (int i = 0; i < 8; i++)
        new_node->children = NULL;
    new_node->num = 0;
    return new_node;
}


Считываются входные данные, создается дерево. Дальше производится обход дерева в глубину для проверки корректности ввода данных, всё ок:

 
Код:
void walk (Node* curr){

    cout << "Node with key "<<  curr->num << ",words: ";
    for (size_t i = 0; i < curr->words.size(); i++)    
        cout << curr->words.first << "," << curr->words.second << " ";
    cout << endl;    
    for (int i = 0; i < 8; i++)
        if (curr->children != NULL)
           walk(curr->children);
}


Ошибка сегментации возникает, когда я всего лишь пытаюсь распечатать элемент массива в одном из узлов:

 
Код:
cout << curr->words[0].first;


При этом размер массива words равен 1, обращаемся к элементу по тому же адресу, по какому обращались при обходе дерева, когда всё работало корректно.

Ошибку сегментации выдаёт gcc версии 4.3.2 и 4.3.4, в последней версии wxDev-C++ под Win XP (там gcc 3.4.5) все работает нормально. В чем может быть причина и как её исправить?
2.1K
06 августа 2010 года
Norgat
452 / / 12.08.2009
смотрите аттач, в нём скриншот окончания walk

вам стоит обратить внимание на последнюю строчку words[0]()
и подумать: "а где я делаю curr->words.push_back()?"

естественно у вас ошибка сегментации... вы же в words ничего не загоняете
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог