Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 16.08.2019
Сообщений: 10
1

Вызвано исключение: нарушение доступа для чтения. **pline** было 0x1C47112

16.08.2019, 14:42. Показов 3479. Ответов 9
Метки нет (Все метки)

Здравствуйте! Хотелось бы обратиться со следующей проблемой. "Вызвано исключение: нарушение доступа для чтения. **pline** было 0x1C47112". Пыталась найти решение в Гугле, но для моего конкретного случая, видимо, нужно что-то другое.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<cstdio>
#include<cstring>
#include "edit.h"
using namespace std;
int GetLine(FILE* finp, char* pline) {
    int i = 0;
    char c;
    while ((c = fgetc(finp)) == ' ')i++;
    if (c == EOF) return 0;
    fseek(finp, -1, SEEK_CUR);
    fgets(pline, maxl_line - i + 1, finp);
    pline[strlen(pline) - 1] = 0;
    return 1;
}
int SearchNextWord(const char*pline, const int curpos) {
    int i = curpos;
    while (pline[i] != ' ') {
        if (pline[i] == '\n') return 0;
        i++;
    }
    while (pline[i] == ' ' && pline[i + 1] == ' ') i++;
    return i + 1;
}
void DefInter(const char* pline, int& base_int, int& add_int, int& inter) {
    int k = 0, end = strlen(pline) - 1;
    while ((pline[end] == ' ') || (pline[end] == '\n') || (pline[end] == '\r'))
        end--;
    inter = 0;
    for (unsigned int i = 0; i < end; i++) {
        if (pline[i] == ' ') {
            k++;
            if (pline[i + 1] != ' ')inter++;
        }
    }
    int blank_amount = k + maxl_line - end;
    if (!k) {
        base_int = 0; add_int = 0;
    }
    else {
        base_int = blank_amount / inter; add_int = blank_amount % inter;
    }
    return;
}
int PutWord(FILE* fout, const char* pline, const int startpos, int& n) {
    int i = startpos;
    char c;
    n++;
    while ((c = pline[i++]) != ' ') {
        fprintf(fout, "%c", c);
        if ((c == '\n') || (c == '\0')) {
            i = 0; break;
        }
    }
    return i - 1;
}
void PutInterval(FILE* fout, const int k) {
    for (int i = 0; i < k; i++) fprintf(fout, " ");
    return;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2019, 14:42
Ответы с готовыми решениями:

Вызвано исключение: нарушение доступа для чтения. s было 0x1110112
Товарищи форумчане, нужна ваша помощь! (Для простоты объяснения прикреплю скрин) Насколько я...

Вызвано исключение: нарушение доступа для чтения. this было 0xCDCDCDCD
Есть у меня код со структурой с динамическими массивами внутри. Через клаву я ввожу данные. И...

Вызвано необработанное исключение: нарушение доступа для чтения. a было 0x34F4A7AE
Исключение в функции Drow_ship. Как это починить? #include &lt;iostream&gt; #include &lt;ctime&gt;...

Ошибка: Вызвано исключение: нарушение доступа для чтения. print было nullptr
Здравствуйте, практикуясь с задание по односвязному списку застрял на непонятной для меня ошибки на...

9
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
16.08.2019, 16:12 2
Цитата Сообщение от Amber17 Посмотреть сообщение
Здравствуйте! Хотелось бы обратиться со следующей проблемой. "Вызвано исключение: нарушение доступа для чтения. **pline** было 0x1C47112". Пыталась найти решение в Гугле, но для моего конкретного случая, видимо, нужно что-то другое.
Ты где-то пишешь за границы массива.

Где ты выделяешь память под pline?
0
0 / 0 / 0
Регистрация: 16.08.2019
Сообщений: 10
16.08.2019, 17:52  [ТС] 3
Честно, не вижу, где это имеет место быть. Если что, пример из книжки, там всё именно так описано.
0
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
16.08.2019, 17:57 4
Цитата Сообщение от Amber17 Посмотреть сообщение
Честно, не вижу, где это имеет место быть. Если что, пример из книжки, там всё именно так описано.
Покажи функцию main()
0
"C with Classes"
1485 / 1287 / 485
Регистрация: 16.08.2014
Сообщений: 5,413
Записей в блоге: 1
16.08.2019, 18:01 5
Цитата Сообщение от Amber17 Посмотреть сообщение
Если что, пример из книжки, там всё именно так описано.
то что пример из книжки нельзя назвать весомым аргументом, опечатки, ошибки, не компетентность авторов, не компетентность переводчиков наконец, ну и еще, ты мог сам ошибиться.
0
0 / 0 / 0
Регистрация: 16.08.2019
Сообщений: 10
16.08.2019, 18:05  [ТС] 6
Пож-та.
C++
1
2
3
4
5
6
7
8
9
10
11
int main() {
    setlocale(LC_ALL, "RU");
    printf("Работает программа Task7_7.\n");
    FILE* finp;
    if (!(finp = fopen("unformt.txt", "r"))) {
        puts("Файл unformt.txt не найден. \n"); exit(0);
    }
    puts("Читается файл unformt.txt.\n");
    FILE* fout;
    if (!(fout = fopen("formatd.txt", "w"))) {
        puts("Файл formatd.txt  не создан.\n"); exit(0);
0
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
16.08.2019, 18:07 7
Цитата Сообщение от Amber17 Посмотреть сообщение
int SearchNextWord(const char*pline, const int curpos) {
* * int i = curpos;
* * while (pline[i] != ' ') {
* * * * if (pline[i] == '\n') return 0;
* * * * i++;
* * }
* * while (pline[i] == ' ' && pline[i + 1] == ' ') i++;
* * return i + 1;
}
Здесь, наверное, надо проверять pline[i] на ноль
while (pline[i] != 0 && pline[i] != ' ') {

Добавлено через 1 минуту
Цитата Сообщение от Amber17 Посмотреть сообщение
Пож-та.
А где здесь вызов GetLine? Покажи всю функцию
0
0 / 0 / 0
Регистрация: 16.08.2019
Сообщений: 10
16.08.2019, 18:14  [ТС] 8
oleg-m1973, в учебнике именно так написано
stanislav, кто ж виноват, что в учебнике сначала описывается обычная функция, а потом вдруг раз - и многофайловый проект? А разобраться-то надо

Добавлено через 2 минуты
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
int main() {
    setlocale(LC_ALL, "RU");
    printf("Работает программа Task7_7.\n");
    FILE* finp;
    if (!(finp = fopen("unformt.txt", "r"))) {
        puts("Файл unformt.txt не найден. \n"); exit(0);
    }
    puts("Читается файл unformt.txt.\n");
    FILE* fout;
    if (!(fout = fopen("formatd.txt", "w"))) {
        puts("Файл formatd.txt  не создан.\n"); exit(0);
    }
    puts("Выполняется запись в файл formatd.txt.\n");
    char line[maxl_line + 1];
    int base_i, add_i, inter;
    int nword = 0;
    while (GetLine(finp, line)) {
        DefInter(line, base_i, add_i, inter);
        PutInterval(fout, margin);
        int next = PutWord(fout, line, 0, nword);
        for (int i = 0; i < inter; i++) {
            int start = SearchNextWord(line, next);
            PutInterval(fout, base_i);
            if (add_i) {
                add_i--; PutInterval(fout, 1);
            }
                next = PutWord(fout, line, start, nword);
                if (!next)break;
            }
            fprintf(fout, "\n");
        }
0
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
16.08.2019, 18:19 9
Цитата Сообщение от Amber17 Посмотреть сообщение
oleg-m1973, в учебнике именно так написано
Цитата Сообщение от Amber17 Посмотреть сообщение
int PutWord(FILE* fout, const char* pline, const int startpos, int& n) {
* * int i = startpos;
* * char c;
* * n++;
* * while ((c = pline[i++]) != ' ') {
Здесь тоже надо бы проверять на 0
C++
1
2
for (; pline[i] != 0 && pline[i] != ' '; ++i)
{
Добавлено через 1 минуту
А вообще, запусти под отладчиком, по F5. Увидишь в какой строчке у тебя ошибка.
0
0 / 0 / 0
Регистрация: 16.08.2019
Сообщений: 10
16.08.2019, 18:22  [ТС] 10
30.if (pline[i] == ' ') {
вот здесь
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2019, 18:22

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Вызвано необработанное исключение: нарушение доступа для чтения. InvMArr было 0x1110113
#include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt; #include&lt;Windows.h&gt;...

Вызвано исключение: нарушение доступа для чтения
Нужно закодировать введённое сообщение . Найти слово в файле, и записать его в виде кода, например...

Вызвано исключение: нарушение доступа для чтения
Программа обрабатывает двумерный массив. На 45-й строке выдает ошибку. #include &quot;stdafx.h&quot;...

вызвано исключение нарушение доступа для чтения
Выдаёт исключение на 35 строке, ругается на переменную nach. #include &quot;stdafx.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.