Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 9

Файлы, строки, fgets, ошибка 0xC0000005

11.03.2015, 19:17. Показов 3125. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такая вот ошибка:

First-chance exception at 0x1025f9cb (msvcr100d.dll) in 6_1.exe: 0xC0000005: Access violation writing location 0x00417861.
Unhandled exception at 0x1025f9cb (msvcr100d.dll) in 6_1.exe: 0xC0000005: Access violation writing location 0x00417861.
The program '[4060] 6_1.exe: Native' has exited with code 0 (0x0).

Гугл не спас

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
int main()
{
    setlocale(LC_ALL, "Russian");
 
    FILE *f1;
    char *str;
    int k=0, p=0, dlina=0, i, a=0, max_p=0, max_s=0;
 
    if ((f1=fopen("C:\\1.txt", "rt"))==NULL)
    {
        printf("Не удается открыть файл =(");
        getch();
    }
    else
    {
// определить номер строки, в которой содержится больше всего пробелов
        str="";
        while (!feof(f1))
        {
            fgets(str, 150, f1); // взяли строку    // НА ЭТОЙ СТРОКЕ ВЫДАЕТСЯ ОШИБКА
            k++;                 // посчитали номер строки
            dlina=strlen(str);  // узнали длину строки
            for (i=0; i<dlina; i++) // считаем кол-во пробелов в данной строке
            {
                if (str[i]=' ') a++;  // a - кол-во пробелов в данной строке
            }
            if (a>max_p) // если "а" больше чем MAX кол-во
            {
                max_p=a;  // запоминаем MAX и номер строки
                max_s=k;
            }
        }
 
        cout << "Больше всего пробелов (" << max_p << ")\nв строке номер " << max_s;
        fclose(f1);
        getch();
    }
    return 0;
}
Добавлено через 10 минут
P.S.
Выдает ошибку и показывает ЭТО:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#endif  /* _UNICODE */
        if (retval!=NULL)
        {
            while (--count)
            {
                if ((ch = _fgettc_nolock(stream)) == _TEOF)
                {
                    if (pointer == string) {
                                    retval=NULL;
                                    goto done;
                    }
 
                    break;
                }
 
                if ((*pointer++ = (_TSCHAR)ch) == _T('\n'))   // ОШИБКА НА ЭТОЙ СТРОЧКЕ
                    break;
            }
 
            *pointer = _T('\0');
        }
Добавлено через 26 минут
Добавила вот это :

C++
1
2
3
4
5
if (fgets(str, 50, f1)==NULL)   // взяли строку
            {
                printf("Строка не взялась"); 
                getch();
            }
С пустым файлом выдает, что строка не взялась.
С файлом с текстом выдает ту же ошибку, надпись не выводит
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.03.2015, 19:17
Ответы с готовыми решениями:

Fatility Fail. ini файлы и 0xc0000005
И снова здрасте! При вводе Логина (Не говоря уже о пароле) выдает ошибку &quot;&quot;&quot;&quot;Необработанное исключение в &quot;0x00011e94&quot; в...

Функция fgets и перевод строки
Есть файл со строками, надо прочитать все через функцию fgets. Как сделать, чтобы она читала каждую строку по очереди? Проблема на...

Использование функции fgets, где ошибка?
Все привет. В чем может быть ошибка, уже долго сижу и не понимаю. Я сперва со строки беру значение и заношу в файл, затем я хочу вытянуть...

4
6 / 6 / 3
Регистрация: 11.05.2014
Сообщений: 43
11.03.2015, 19:26
Лучший ответ Сообщение было отмечено StasyaBatt как решение

Решение

Сразу скажу, ошибка доступа - скорее всего утечка памяти.
Случается это в строках.
Есть слово "ОБЕЗЬЯНА". В памяти расположено так: "ОБЕЗЬЯНА\0", где '\0' - символ конца строки. Если его не будет, то мы продолжим читать дальше этой строки, а это уже чужая память.
Короче...
Вам выдаёт код функции fgets и тыкает именно в то место, хотя это совсем и не нужно. Я бы показал на переменную str, а вернее на её определение строкой str="". Это тоже самое, что str = new char[1]. Вы выделили указатель на кучу данных размером 1. И вот этим одним элементом и будет нуль-терминирующий символ '\0'. Вы попробуйте в дебагере посмотреть что содержится в str после выполнения этой строки, там вроде бы долно быть либо "", либо "\0", если первое, то в watchlist вбейте str[0], должен быть '\0'. :-)
Решение:
Поменяйте строку str="" на str = new char[151];
Что делаем: задаём максимальный размер строки (в чтении из файла написано 150, поэтому 150 + закрывающий символ = 151).
1
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 9
11.03.2015, 19:36  [ТС]
Цитата Сообщение от MrHungry Посмотреть сообщение
Сразу скажу, ошибка доступа - скорее всего утечка памяти.
Случается это в строках.
Есть слово "ОБЕЗЬЯНА". В памяти расположено так: "ОБЕЗЬЯНА\0", где '\0' - символ конца строки. Если его не будет, то мы продолжим читать дальше этой строки, а это уже чужая память.
Короче...
Вам выдаёт код функции fgets и тыкает именно в то место, хотя это совсем и не нужно. Я бы показал на переменную str, а вернее на её определение строкой str="". Это тоже самое, что str = new char[1]. Вы выделили указатель на кучу данных размером 1. И вот этим одним элементом и будет нуль-терминирующий символ '\0'. Вы попробуйте в дебагере посмотреть что содержится в str после выполнения этой строки, там вроде бы долно быть либо "", либо "\0", если первое, то в watchlist вбейте str[0], должен быть '\0'. :-)
Решение:
Поменяйте строку str="" на str = new char[151];
Что делаем: задаём максимальный размер строки (в чтении из файла написано 150, поэтому 150 + закрывающий символ = 151).
MrHungry,
Спасибо, ошибка пропала, но можно ли написать просто char str[151], без указателей?

И скажите, всё ли верно в этой строчке: if (str[i]=' ') a++; // a - кол-во пробелов в данной строке
Потому что похоже выводится не кол-во пробелов, а общее кол-во символов в строке...
0
6 / 6 / 3
Регистрация: 11.05.2014
Сообщений: 43
11.03.2015, 19:47
Честно говоря, можно и просто написать char str[151], в памяти это будет выглядеть абсолютно так же )
Если что, указатель(ссылка) на начало массива берётся таким образом: &str[0] (обычно функции запрашивают указатель).
А вот if не совсем правильный, и будет всегда выполняться.
= - это присваивание, а == - это сравнение. Так что if(str[i] == ' ') ++a; будет корректнее.
Кстати, присваивание тоже возвращает значение, а именно то, которое было присвоено.
0
0 / 0 / 0
Регистрация: 11.03.2015
Сообщений: 9
11.03.2015, 20:03  [ТС]
Цитата Сообщение от MrHungry Посмотреть сообщение
А вот if не совсем правильный, и будет всегда выполняться.
Точно, спасибо, не доглядела)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2015, 20:03
Помогаю со студенческими работами здесь

Вывод конкретно заданной строки файла через fgets
Есть функция вывода конкретной строки, если я хочу вывести первую строку файла, то она не выводит первый(начальный) символ строки....

Что за ошибка? Warning: fgets() expects parameter 1 to be resource
Привет! Я начинаю изучать язык php. У меня стоит Windows XP, установлен OpenServer. Изучать php начала по учебнику &quot;Исчерпывающее...

Ошибка 0xc0000005
Сегодня перестали работать программы. Ошибка 0xc0000005, либо вообще не запускаются, AVZ не запускается. Логи могу дать только от RIST.

Ошибка 0xc0000005
Здравствуйте. Почитав данный раздел так внятного для себя я не нашел да и если честно ошибку выдаёт программа, хотя она системная. Хм В...

Ошибка 0xc0000005
Добрый день всем. Сегодня обновил win7 (пират) комп предложил перезапустится, перезагрузил и тут началось..... Отказались...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru