Форум программистов, компьютерный форум, киберфорум
Наши страницы

Странности с чтением объекта структуры из файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Добавить в конец непустой очереди все ее элементы, располагая их в обратном порядке http://www.cyberforum.ru/cpp-beginners/thread574964.html
Добавить в конец непустой очереди все ее элементы, располагая их в обратном порядке.
C++ Как правильно составить блок схему по такому типажу кода. double a, f; cout<<"vvedite a:"<<""; cin>>a; if (a>=4) f=6; if (-4<a<4) f=3/8*a*a; if (a<-4) f=3*a+18; cout<<"("<<a<<","<<f<<")"; if (a>f) cout<<"kratch rasst do x:"<<f; else... http://www.cyberforum.ru/cpp-beginners/thread574950.html
Как преобразовать массив в строку и обратно C++
Знаю как преобразовывать переменные в строку Но может есть в с++ какая то функция которая быстро преобразует весь массив в строку с заданным разделителем ? или возможен только вариант с ...
C++ Динамический массив отсортировать по возростанию методом быстрой сортировки
Отсортировать дин. масив по возростанию методом быстрой сортировки.
C++ Написать функцию чтения почтового сообщения с отдельным выводом заголовка, отправителя, получателя и самого письма. Номер письма в файле вводится пара http://www.cyberforum.ru/cpp-beginners/thread574922.html
Написать функцию чтения почтового сообщения с отдельным выводом заголовка, отправителя, получателя и самого письма. Номер письма в файле вводится параметром функции.
C++ дана целочисленная таблица a[1..m]. дана целочисленная таблица a. среди элементов таблицы есть хотя бы один отрицательный. найти сумму s элементов расположенных после отрицательного элемента, затем найти сумму простых множетелей числа... подробнее

Показать сообщение отдельно
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517

Странности с чтением объекта структуры из файла - C++

15.05.2012, 12:49. Просмотров 847. Ответов 12
Метки (Все метки)

Почему-то возникают проблемы с чтением объектов структуры из файла.
Структура
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Item
{
    Item(int k,const char* ch, Item* n=NULL)
    :key(k),info(new char[strlen(ch)+1]),next(n)
    {
        strcpy(info,ch);
        length=strlen(info)+1;
    }
    int key;
    char* info;
    Item* next;
    int shift;
    int length;
};
Функция где я записываю объект структуры и тут же считываю его. Работает правильно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void Test()
{
    Item* it,*it2;
    it2=new Item(1,"anyway");//в этот объект я буду читать из файла. Он должен изменится!
 
    it= new Item(100500,"t");//этот объект я хочу записать в файл
    it->shift=200;
    it->length=2;
 
    FILE* out=fopen("out.txt","r+");
    if(!out)
     cerr<<"Can't open file\n";
 
    fwrite(&it,sizeof(Item),1,out);
    fclose(out);
 
    FILE* in=fopen("out.txt","r");
    if(!in)
     cerr<<"Can't open file\n";
    fread(&it2,sizeof(Item),1,in);
    cout<<it2->key;//key = 100500 что правильно
}
А теперь чудеса. После запуска этой функции у меня ведь остался файл out.txt где осталась эта одна запись объекта стрктуры. Я засовываю в комментарии теперь тот код где я пишу объект структуры и пытаюсь сразу считать её и о чудо - получаю сегфолт.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Test()
{
    Item* it,*it2;
    it2=new Item(1,"anyway");//в этот объект я буду читать из файла. Он должен изменится!
    /*
    it= new Item(100500,"t");//этот объект я хочу записать в файл
    it->shift=200;
    it->length=2;
 
    FILE* out=fopen("out.txt","r+");
    if(!out)
     cerr<<"Can't open file\n";
 
    fwrite(&it,sizeof(Item),1,out);
    fclose(out);
    */
 
    FILE* in=fopen("out.txt","r");
    if(!in)
     cerr<<"Can't open file\n";
    fread(&it2,sizeof(Item),1,in);
    cout<<it2->key;// тут программа вылетает
}
Помогите пожалуйста, не логично оно (с моей стороны) получается. Может я что забыл о сишной работе с файлами.
P.S Да, я в курсе что всё на то что указывают указатели нужно писать отдельно и что оно так как я сейчас делаю не запишеться, но я хочу чтобы писался и читался каркас - обычные поля (не указатели) моей структуры.

Добавлено через 2 часа 38 минут
Из любопытного ещё:
vs2010 даёт вывести ключ что в it2 и он считан правильно, но после этой строчки vs говорит что стеку не хорошо
"Run-Time Check Failure #2 - Stack around the variable 'it' was corrupted."
Что же делать? Собственно задача писать эту стркутуру через fwrite и читать через fread в бинарник. Как же я по другому её решу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru