Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
#1

"Нарушение прав доступа при чтении "0x00000000"" - C++

07.12.2013, 21:24. Просмотров 633. Ответов 8
Метки нет (Все метки)

Добрый вечер, товарищи! Возникает ошибка "Нарушение прав доступа при чтении "0x00000000"". Не понимаю в чем проблема.



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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    FILE*file=fopen("D:\\studenty.txt", "rt");
    if(file==NULL)
    {
        cout<<"can't open file";
        system("pause");
        return -1;
    }
    double mrk1, mrk2, mrk3;
    char mas[100], surname[20], group[3], mark1[1], mark2[1], mark3[1];
    char*n, *m, *k, *p, *f;
    while(!feof(file))
    {
        
        fscanf (file, "%s\n", mas);
 
        n=strchr (mas, ';');
        strncpy (surname, mas, n-mas);
        surname[n-mas]='\0';
 
        k=strchr (n+1, ';');
        strncpy (group, mas, k-mas);
        group[k-mas]='\0';
 
        m=strchr (k+1, ';');
        p=strchr (m+1, ';');
        f=strchr (p+1, ';');
        strncpy (mark1, mas, m-mas);
        mark1 [m-mas]='\0';
 
        strncpy (mark2, mas, p-mas);
        mark2 [p-mas]='\0';
 
        strncpy (mark3, mas, f-mas);
        mark3 [f-mas]='\0';
 
        mrk1=atof(mark1);
        mrk2=atof(mark2);
        mrk3=atof(mark3);
 
        if ((mrk1<3)||(mrk2<3)||(mrk3<3))
        {
            cout<<surname<<";"<<group<<";"<<mark1<<";"<<mark2<<";"<<mark3<<'\n';
        }
    }
    fclose(file);
    system ("pause");
    return 0;
}
Миниатюры
"Нарушение прав доступа при чтении "0x00000000""  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2013, 21:24     "Нарушение прав доступа при чтении "0x00000000""
Посмотрите здесь:

C++ Нарушение прав доступа при записи "0x00000000"
Работа со списками ("Нарушение прав доступа записи") C++
Быстрая сортировка. Нарушение прав доступа при чтении "0xfdfdfdfd" C++
C++ Нарушение прав доступа при записи "0xabababab"
Создание динамических массивов внутри класса: Нарушение прав доступа при чтении "0xbf800000" C++
C++ Нарушение прав доступа при чтении "0xcdcdcdcd"
C++ 0xC0000005: Нарушение прав доступа при записи "0xcccccccc". Инициализация строк
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1632 / 1260 / 127
Регистрация: 21.12.2010
Сообщений: 1,922
Записей в блоге: 7
07.12.2013, 21:29     "Нарушение прав доступа при чтении "0x00000000"" #2
если strchr возвратит нулевой указатель то что cделает функция strncpy?
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
07.12.2013, 22:15  [ТС]     "Нарушение прав доступа при чтении "0x00000000"" #3
Ну вообще мне необходимо разбить строку текстового файла и поместить в массивы (surname[], group[], mark1[], mark2[], mark3[] соответственно). Пример строки:
Smirnov; 101; 2; 3; 5;
strchr, по идее, возвращает указатель на символ ";", так как он у нас является разделительным. А ctrncpy должно скопировать, например, строку "Smirnov" в массив "surname[]".

Добавлено через 28 минут
Нашла ошибку. Ругается на указатель
C++
1
k=strchr (n+1, ';');
и все следующие указатели. Только вот как его переписать правильно?

Добавлено через 5 минут
igorrr37, что скажете?
igorrr37
1632 / 1260 / 127
Регистрация: 21.12.2010
Сообщений: 1,922
Записей в блоге: 7
07.12.2013, 22:22     "Нарушение прав доступа при чтении "0x00000000"" #4
fscanf, если не ошибаюсь, считывает до первого пробела, а считывать надо сразу всю строку. Используй другую ф-цию чтения.
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
08.12.2013, 00:53  [ТС]     "Нарушение прав доступа при чтении "0x00000000"" #5
igorrr37, вы имеете ввиду функцию fgets?
Если я прописываю
C++
1
fgets (mas, 100, file);
, то файл читается, но всеравно не правильно. И после этого
выбивает ту же ошибку.
(Посмотрите, 2-е фото - исходный файл. По условию задачи программа должна выводить на экран информацию о студенте если хотя бы одна из его оценок ниже 3. Оценки - это последние 3 цифры в строке).
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
08.12.2013, 00:54  [ТС]     "Нарушение прав доступа при чтении "0x00000000"" #6
Скрины..
Миниатюры
"Нарушение прав доступа при чтении "0x00000000""   "Нарушение прав доступа при чтении "0x00000000""  
igorrr37
1632 / 1260 / 127
Регистрация: 21.12.2010
Сообщений: 1,922
Записей в блоге: 7
08.12.2013, 01:37     "Нарушение прав доступа при чтении "0x00000000"" #7
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
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
 
int main()
{
 
    FILE*file=fopen("in.txt", "rt");
    if(file==NULL)
    {
        cout<<"can't open file";
        system("pause");
        return -1;
    }
    double mrk1, mrk2, mrk3;
    char mas[100], surname[20], group[10], mark1[5], mark2[5], mark3[5];
    char*n, *m, *k, *p, *f;
 
        while(!feof(file))
        {
            fgets(mas, 100, file);
 
            n=strchr (mas, ';');
            strncpy (surname, mas, n-mas);
            surname[n-mas]='\0';
 
            k=strchr (n+1, ';');
            strncpy (group, n+1, k-n-1);
            group[k-n-1]='\0';
 
            m=strchr (k+1, ';');
            p=strchr (m+1, ';');
            f=strchr (p+1, ';');
            strncpy (mark1, k+1, m-k-1);
            mark1 [m-k-1]='\0';
 
            strncpy (mark2, m+1, p-m-1);
            mark2 [p-m-1]='\0';
 
            strncpy (mark3, p+1, f-p-1);
            mark3 [f-mas]='\0';
 
            mrk1=atof(mark1);
            mrk2=atof(mark2);
            mrk3=atof(mark3);
 
            if ((mrk1<3)||(mrk2<3)||(mrk3<3))
            {
                cout<<surname<<";"<<group<<";"<<mark1<<";"<<mark2<<";"<<mark3<<'\n';
            }
        }
    fclose(file);
    system ("pause");
    return 0;
}
Rokky
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 14
08.12.2013, 02:11  [ТС]     "Нарушение прав доступа при чтении "0x00000000"" #8
igorrr37,
Миниатюры
"Нарушение прав доступа при чтении "0x00000000""  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2013, 02:34     "Нарушение прав доступа при чтении "0x00000000""
Еще ссылки по теме:

Ошибка "Нарушение прав доступа при записи" C++
"Нарушение прав доступа при чтении по адресу 0x00000000" C++
C++ Нарушение прав доступа при чтении по адресу 0x00000000
"Нарушение прав доступа при чтении" C++
C++ Нарушение прав доступа при чтении "0xcdcdcdcd"

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

Или воспользуйтесь поиском по форуму:
igorrr37
1632 / 1260 / 127
Регистрация: 21.12.2010
Сообщений: 1,922
Записей в блоге: 7
08.12.2013, 02:34     "Нарушение прав доступа при чтении "0x00000000"" #9
строку 42 забыл исправить
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
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
 
int main()
{
 
    FILE*file=fopen("in.txt", "rt");
    if(file==NULL)
    {
        cout<<"can't open file";
        system("pause");
        return -1;
    }
    double mrk1, mrk2, mrk3;
    char mas[100], surname[20], group[10], mark1[5], mark2[5], mark3[5];
    char*n, *m, *k, *p, *f;
 
        while(!feof(file))
        {
            fgets(mas, 100, file);
 
            n=strchr (mas, ';');
            strncpy (surname, mas, n-mas);
            surname[n-mas]='\0';
 
            k=strchr (n+1, ';');
            strncpy (group, n+1, k-n-1);
            group[k-n-1]='\0';
 
            m=strchr (k+1, ';');
            p=strchr (m+1, ';');
            f=strchr (p+1, ';');
            strncpy (mark1, k+1, m-k-1);
            mark1 [m-k-1]='\0';
 
            strncpy (mark2, m+1, p-m-1);
            mark2 [p-m-1]='\0';
 
            strncpy (mark3, p+1, f-p-1);
            mark3 [f-p-1]='\0';
 
            mrk1=atof(mark1);
            mrk2=atof(mark2);
            mrk3=atof(mark3);
 
            if ((mrk1<3)||(mrk2<3)||(mrk3<3))
            {
                cout<<surname<<";"<<group<<";"<<mark1<<";"<<mark2<<";"<<mark3<<'\n';
            }
        }
    fclose(file);
    system ("pause");
    return 0;
}
Yandex
Объявления
08.12.2013, 02:34     "Нарушение прав доступа при чтении "0x00000000""
Ответ Создать тему
Опции темы

Текущее время: 18:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru