У меня есть входной файл
0 0 7
7 0 25
7 1 12
25 0 18
25 1 3
18 0 6
12 0 22
12 1 8
По этому файлу строится бинарное дерево. Первая цифра обозначает значение родителя, если она равна 0, то это корень. Вторая цифра говорит будет новый элемент справа или слева (0 или 1). Третий символ это значение нового узла. Метод добавления элемента
void add(ONode *&tree, int val, int left = NULL) {
if(tree == NULL) {
tree = new ONode;
tree->val = val;
tree->left = tree->right = NULL;
}
else {
(left == 1) ? add(tree->right, val) : add(tree->left, val);
}
}
И само добавление
while(!feof(input)) {
int p, l, v;
fscanf(input, "%d %d %d", &p, &l, &v);
if(p == 0) add(a, v);
else {
ONode *t = NULL;
t = search(a, p);
add(t, v, l);
}
}
Но всё рушится когда пытаюсь добавить 18 в дерево, с выводом
Первый этап обработки исключения по адресу 0x00CF3E21 в ConsoleApplication12.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFE01. Необработанное исключение по адресу 0x00CF3E21 в ConsoleApplication12.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFE01.
в чём может быть дело ?
Первое, что нужно сделать это поставить брекпоинт и запустить отладчик (так найдётся место на котором вылет...)
left и right?
(они так и остаются равные "0" )вот вам и ошибка доступа...
Решение: проблема была в функции search.
Продвижение своими сайтами как стратегия роста и независимости