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 << "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) все работает нормально. В чем может быть причина и как её исправить?
вам стоит обратить внимание на последнюю строчку words[0]()
и подумать: "а где я делаю curr->words.push_back()?"
естественно у вас ошибка сегментации... вы же в words ничего не загоняете