Написал основу, но при запуске - ошибка.
"Bus error"
Проще говоря, где то программа выходит за пределы выделенной памяти.
Посмотрите плиз, где ошибочка будет.
Код:
/*------------------TREE----------------------- */
#include <stdio.h>
typedef struct TNode
{
int Data;
struct TNode *right;
struct TNode *left;
} Tree;
Tree *Root = NULL;
void ReadFromFile(Tree *Top)
{
int tmp = 0;
FILE *f;
f = fopen("nums","r");
if (Top == NULL)
{
fscanf(f, "%d\n", &tmp);
Top = (Tree*) malloc(sizeof(Tree));
Top->Data = tmp;
Top->left = NULL;
Top->right = NULL;
};
while (!feof(f))
{
fscanf(f, "%d\n", &tmp);
InsertNode(Top, tmp);
};
};
void PrintTree(Tree *Top)
{
printf("%d", Top->Data);
if (Top->left != NULL)
PrintTree(Top->left);
if (Top->right != NULL)
PrintTree(Top->right);
};
void InsertNode(Tree *p, int i)
{
if ( i < p->Data )
if ( p->left == NULL )
{
p->left = (Tree*) malloc(sizeof(Tree));
p->left->Data = i;
p->left->left = p->left->right = NULL;
}
else
InsertNode(p->left, i);
else
if ( i > p->Data)
if ( p->right == NULL )
{
p->right = (Tree*) malloc(sizeof(Tree));
p->right->Data = i;
p->right->left = p->right->left = NULL;
}
else
InsertNode(p->right, i);
// free(p->right);
// free(p->left);
};
int main()
{
ReadFromFile(Root);
// PrintTree(Root);
if ( Root == NULL)
printf("%d\n", 123);
return 0;
};
Yandex 17:50 04.05.2009
Сообщение от :
Написал основу, но при запуске - ошибка
Не верю! (с)
aerin 17:54 04.05.2009
mexx
Дело в том, что в C параметры передаются по значению.
mexx 17:58 04.05.2009
Yandex, ну что поделать, мож таланту нет)
aerin, странно как-то. Хотя у Кернигана так и написано
И что теперь делать? Использовать глобальные переменные?
aerin 18:23 04.05.2009
Вариантов масса - использовать указатели на указатели, переписать алгоритм так, чтоб адрес нового элемента возвращался функцией.
ЗЫ. Непонятно только, зачем нужно изобретать кривой лисапед, если в C++ есть готовый std::list Или у вас какая-нибудь embeded-система, и С++ там нет?
mexx 18:24 04.05.2009
aerin, просто преподаватель в университете дал задание реализовать дерево на чистом Си, без плюсов