Пытаюсь сделать чтение из бинарного файла в дерево поиска. Но в один момент, там где должен быть нулевой указатель почему-то появляется бесконечный указатель на самого себя. Долго искал дебаггером причину, так и не нашёл. Может быть взгляд со стороны поможет?
struct Tree
{
Tree* left = 0;
Tree* right = 0;
int key;
int size = 1;
string brand;
string name;
};
Tree* insert(Tree* tree, int key, string brand, string name)
{
if (!tree) {
Tree* newtree = new Tree();
newtree->key = key;
newtree->brand = brand;
newtree->name = name;
return newtree;
}
if (tree->key > key)
tree->left = insert(tree->left, key, brand, name);
else
tree->right = insert(tree->right, key, brand, name);
return tree;
}
Tree * readElement(Tree* tree) {
string brand;
string name;
int carNumber;
int len;
char* buf;
int left, right;
iffile.read((char*)&carNumber, 4);
iffile.read((char*)&len, 4);
buf = new char[len];
iffile.read(buf, len);
brand = buf;
delete[]buf;
iffile.read((char*)&len, 4);
buf = new char[len];
iffile.read(buf, len);
name = buf;
delete[]buf;
tree = insert(tree, carNumber, brand, name);
iffile.read((char*)&left, 4);
if (left) {
tree->left = readElement(tree);
}
else {
tree->left = 0;
}
iffile.read((char*)&right, 4);
if (right) {
tree->right = readElement(tree);
}
else {
tree->right = 0;
}
return tree;
}
Tree* readFromFile(Tree* tree) {
iffile.open(filePath, ios::binary | ios::in);
tree = readElement(tree);
iffile.close();
return tree;
}
С самой структурой бинарного файла проблемы нет, по одиночке элементы прекрасно читаются, ломается всё только тогда, когда начинают выставляться связи.