Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Access violation 
:(
    Опции темы
lexxx1k
Дата 22.2.2012, 21:40 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.2.2012

Репутация: нет
Всего: нет



Просьба помочь, у меня программа работает, делает всё, что надо, но уже после выполнения программы, когда доходит до return в мэйне выдаёт: "Unhandled exception at 0x596fad54 (msvcp100d.dll) in Binar.exe: 0xC0000005: Access violation writing location 0xfeeefeee." Есть предположение, что это как-то связано с закрытием файла через fclose, но не получается никак
Код

struct text5                  
{
    string surname;
    int group;
    int ID;
};
...
void writetext5(text5 *a, int i, const char *c)         //запись в бинарный файл с именем с, массива а, размером i+1
{
    FILE *f1;
    if ((f1=fopen(c, "wb"))!=NULL)
    {
        int k;
        for (k=0; k<=i; k++)
        {
            fwrite(&a[k], sizeof(text5), 1, f1);
        }
        fclose(f1);
    }
    else
    {
        cout<<"Cannot open the file"<<endl;
    }

}
...
void BinarPrint(const char*c)        //Собственно начинаются проблемы, при вводе данной функции
{
    FILE *f1;
    text5 a[200];
    int i=0;
    if ((f1=fopen(c,"rb"))!=NULL)
    {
        if(fread(&a[0], sizeof(text5),1,f1)!=0)
        {
            while(!(feof(f1)))
            {
                i++;
                fread(&a[i], sizeof(text5),1,f1);
            }
        }
    }
    sortprint(a,i-1);
}
...
int main()
{
...
text5 T5[200];
...//заполняю Т5
writetext5(T5, BadCount, "text5");
BinarPrint("text5");
...
return 0;
}


в консоль всё правильно выдаёт, нужные значения, но при выполнении вылетает ошибка,а  если иду пошагво, уже при выполнении return вылетает: "Unhandled exception at 0x596fad54 (msvcp100d.dll) in Binar.exe: 0xC0000005: Access violation writing location 0xfeeefeee."

Буду премного благодарен, если кто-нибудь сможет помочь. 
PM MAIL   Вверх
feodorv
Дата 22.2.2012, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
struct text5                  
{
    string surname;
    ...
};

А что у Вас такое string? Его можно безболезненно читать из файла или писать в файл?

Добавлено через 6 минут и 46 секунд
Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
        for (k=0; k<=i; k++)

k <= i - это правильно?
Вы бы проверили число прочитанных структур супротив записанных...

Добавлено через 8 минут и 38 секунд
Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
    sortprint(a,i-1);

Что есть sortprint, и почему i-1?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
feodorv
Дата 22.2.2012, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
    if ((f1=fopen(c,"rb"))!=NULL)
    {
        if(fread(&a[0], sizeof(text5),1,f1)!=0)
        {
            while(!(feof(f1)))
            {
                i++;
                fread(&a[i], sizeof(text5),1,f1);
            }
        }
    }

Очень странная логическая последовательность операторов (например, если в файле находится всего одна структура, то i так и остаётся 0, а i-1 вообще становится невыносимым))), намекающая на тот самый k<=i...

Да, и fclose было бы недурно сделать)))

Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
уже после выполнения программы, когда доходит до return в мэйне выдаёт

На вид испорчен стек (у Вас точно не более 200 структур)?

Это сообщение отредактировал(а) feodorv - 22.2.2012, 23:31


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
lexxx1k
Дата 23.2.2012, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.2.2012

Репутация: нет
Всего: нет



Цитата(feodorv @ 22.2.2012,  23:03)
Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
struct text5                  
{
    string surname;
    ...
};

А что у Вас такое string? Его можно безболезненно читать из файла или писать в файл?

Добавлено @ 23:09
Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
        for (k=0; k<=i; k++)

k <= i - это правильно?
Вы бы проверили число прочитанных структур супротив записанных...

Добавлено @ 23:11
Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
    sortprint(a,i-1);

Что есть sortprint, и почему i-1?

Я ведь пишу структуру, так что я полагаю, что можно. +к этому программа правильно считывает т.е. выдаёт в рез-те то же самое, что я записал в файл


Сортпринт - программа, которая сортирует мой массив и распечатывает его содержимое, для кол-ва элементов указанном во втором аргументе. А i-1 потому что у меня все форы сделаны <= поэтому на 1 меньше я делаю. Т.е. у меня в массиве элементы 0...i-1 . В функции я использую, что у меня массив состоит из 0..a - аргумент принимаемыей sortprint во втором аргументе

Добавлено через 3 минуты и 16 секунд
Цитата(feodorv @ 22.2.2012,  23:19)
Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
    if ((f1=fopen(c,"rb"))!=NULL)
    {
        if(fread(&a[0], sizeof(text5),1,f1)!=0)
        {
            while(!(feof(f1)))
            {
                i++;
                fread(&a[i], sizeof(text5),1,f1);
            }
        }
    }

Очень странная логическая последовательность операторов (например, если в файле находится всего одна структура, то i так и остаётся 0, а i-1 вообще становится невыносимым))), намекающая на тот самый k<=i...

Да, и fclose было бы недурно сделать)))

Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
уже после выполнения программы, когда доходит до return в мэйне выдаёт

На вид испорчен стек (у Вас точно не более 200 структур)?

У меня описано 7 структур, сейчас попробую уменьшить размер массивов под них, может поможет
PM MAIL   Вверх
lexxx1k
Дата 23.2.2012, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.2.2012

Репутация: нет
Всего: нет



Появилось такое дело, я скинул код своему другу, у него всё нормально , безо всяких ошибок делает, а в моей вижуалке на ноуте эта ошибка, как вылазила , так  и вылазит, может кто-нибудь подсказать, что нужно изменить в настройках вижуал студии 10ой?
PM MAIL   Вверх
feodorv
Дата 23.2.2012, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(lexxx1k @  23.2.2012,  14:20 Найти цитируемый пост)
Т.е. у меня в массиве элементы 0...i-1 .

А здесь -1 учитывается?
Цитата(lexxx1k @  22.2.2012,  21:40 Найти цитируемый пост)
writetext5(T5, BadCount, "text5");




Цитата(lexxx1k @  23.2.2012,  14:20 Найти цитируемый пост)
Сортпринт - программа, которая сортирует мой массив

Попробуйте запустить без вызова этой функции.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
xvr
Дата 24.2.2012, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(lexxx1k @  23.2.2012,  14:20 Найти цитируемый пост)
Я ведь пишу структуру, так что я полагаю, что можно.

Неправильно полагаете. string - это класс, который располагает свои данные на куче. fread этого сделать не сможет

Цитата(lexxx1k @  23.2.2012,  14:20 Найти цитируемый пост)
к этому программа правильно считывает т.е. выдаёт в рез-те то же самое, что я записал в файл

Т.е. падение в конце - это по вашему нормально?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.