Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2010, 15:44   #1
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию Ошибка при чтении из файла

Здравствуйте.
При чтении данных бинарного дерева из файла возникает следующая ошибка:
Debug assertion failed!

Expressionbuffer!=0)
Подскажите, как с этим бороться?
Код:
void Tree::Save(){
	FILE *Db;
	if((Db=fopen("Directory","wb+"))==NULL)
		Db=fopen("Directory","rb+");
	Save_Tree(Root,Db);
	fclose(Db);
}
void Tree::Save_Tree(Node *Temp,FILE *F){
	if(Temp!=0){
		fwrite(Temp,sizeof(*Temp),1,F);
		Save_Tree(Temp->Left,F);
		Save_Tree(Temp->Right,F);
	}
}
int Tree::Load(){
	FILE *Db;
	if((Db=fopen("Directory","rb+"))==NULL)
		return 0;
	Load_Tree(Root,Db);
	fclose(Db);
	return 1;
}
void Tree::Load_Tree(Node *Temp,FILE *F){
	fread(Temp,sizeof(*Temp),1,F); //в этой строке происходит ошибка
	if(Temp!=0){
		Load_Tree(Temp->Left,F);
		Load_Tree(Temp->Right,F);
		fread(Temp,sizeof(*Temp),1,F);
	}
}
alex_alpha вне форума Ответить с цитированием
Старый 26.07.2010, 15:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if((Db=fopen("Directory","wb+"))==N ULL)
Db=fopen("Directory","rb+");
Что-то я не понял. Ты пытаешься открыть файл на запись, если это не удается, ты пытаешься открыть его на чтение?? Может тут стоит наоборот делать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.07.2010, 16:11   #3
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию

wb+ - создать бинарный файл для чтения и записи
rb+ - открыть существующий бинарный файл для чтения и записи
Да там-то все в порядке, данные записываются в файл корректно. Ошибка вылетает в функции Load_Tree.
alex_alpha вне форума Ответить с цитированием
Старый 26.07.2010, 20:58   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Вы же записываете сразу весь объект, вместе со всей его внутренней структурой и - самое главное! - вместе с указателями. Естественно, что если записать в файл значение указателя, то потом при чтении его ничего хорошего не получится.
Лучше пишите отдельно все элементы - сначала значение, потом, например, для каждого указателя флаг типа bool - есть дочерний узел или нет. Если есть, то загружаете значение из следующего узла, его флаги дочерних элементов и создаете новый узел с этим значением и вызываете снова функцию чтения, после чего втыкаете и этот узел как дочерний...
Немного путанно, пожалуй, но главное - не записывайте и не записывайте указатели в файл/из файла; выделяйте память для новых узлов, заполняя их поля загруженными по отдельности значениями и потом приделывайте эти узлы в качестве дочерних уже созданному.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 26.07.2010, 21:28   #5
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию

Так вот оно в чем дело... Спасибо за подсказку!
alex_alpha вне форума Ответить с цитированием
Старый 08.08.2010, 20:28   #6
deviart
 
Регистрация: 08.08.2010
Сообщений: 8
По умолчанию

А "+" тут ни на хрен не нужен, он означает дозапись в конец файла.
deviart вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при чтении mp3 тегов Anfall Мультимедиа в Delphi 12 25.07.2010 03:31
ошибка при чтении файла ongleb Общие вопросы C/C++ 17 30.07.2009 13:48
ошибка при чтении файла Alik-Soldier Общие вопросы C/C++ 1 31.05.2009 20:44
Проблема при чтении из файла Satorin Общие вопросы Delphi 2 17.12.2008 11:32
Ошибка при чтении БД из файла!! sting БД в Delphi 4 14.12.2008 22:23