Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Возврат указателя на массив из функции http://www.cyberforum.ru/cpp-beginners/thread157779.html
Здравствуйте. Пытаюсь вернуть указатель на массив из функции. #include <iostream> using namespace std; int* ReturnArray() {
C++ Создание класса, представляющего многочлен Доброго времени суток, Профессионалы! Имеется задание: Создать класс Polynom ( многочлен ) с операциями +, +=, -, -=, =, ==, !=, >, <, >=, <=, *, *= Для выполнения операций >, <, >=, <=, надо подставить некоторое число вместо X? И , что делать с ==, != ? http://www.cyberforum.ru/cpp-beginners/thread157761.html
C++ Вывод кавычек при использовании printf
как с помощью printf напечатать строку в которой неоднократно содержаться двойные кавычки ?
Шифратор пароля. Покритикуйте пожалуйста. C++
Это моя первая программка на С++, если кому не лень, натычте меня носом в ляпы. Чтобы не топтаться по граблям. :) #include <iostream> #include <string> #include <ctime> #include <fstream> using namespace std;
C++ Если в C++ аналог оператора with в Pascal? http://www.cyberforum.ru/cpp-beginners/thread157684.html
Если в C++ аналог оператора with в Pascal?
C++ С++ устаревает?? С++ устаревает?? Или ещё нет? подробнее

Показать сообщение отдельно
Pils
Сообщений: n/a
06.08.2010, 18:00     Непонятная ошибка сегментации
В программе используется дерево, элементы которого описываются и создаются таким образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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[i] = NULL;
    new_node->num = 0;
    return new_node;
}
void add_node(Node* curr, int index)
{
    Node* new_node = create_node();
    curr->children[index] = new_node;
Считываются входные данные, создается дерево. Дальше производится обход дерева в глубину для проверки корректности ввода данных:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void tree_input(Node* root, string word, unsigned int freq)
{
     Node* curr = root;
     pair <string, unsigned int> tmp;
     int key;
     
     for (size_t i = 0; i < word.size(); i++)
     {
         key = letter_to_int(word[i]);         
         if (curr->children[key] == NULL)     
             add_node(curr, key);    
         curr = curr->children[key];
         curr->num = key;
    } 
     tmp.first = word;
     tmp.second = freq;     
     curr->words.push_back(tmp);
}
void walk (Node* curr){
 
    cout << "Node with key "<<  curr->num << ",words: ";
    for (size_t i = 0; i < curr->words.size(); i++)    
        cout << curr->words[i].first << "," << curr->words[i].second << " ";
    cout << endl;    
    for (int i = 0; i < 8; i++)
        if (curr->children[i] != NULL)
           walk(curr->children[i]); 
}
Заполняется дерево так, как надо, обход тоже проходит нормально, все на своих местах. Ошибка сегментации возникает, когда я всего лишь пытаюсь распечатать элемент массива в одном из узлов:

C++
1
 cout << curr->words[0].first;
При этом размер массива words равен 1. Когда я обращаюсь к этому же элементу по ТОМУ ЖЕ адресу во вребя обхода дерева и выполняю такое же действие, все работает нормально.

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

Добавлено через 4 часа 13 минут
Есть кто?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru