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

Нарушение прав доступа при записи по адресу

02.02.2015, 12:48. Показов 846. Ответов 1
Метки нет (Все метки)

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;
 
struct worker
{
    char *fio;
    char *dolzh;
    int god;
}; worker list[10];
 
void mas_add()
{
    for (int i = 0; i < 10; i++)
    {
        cout << "Заполняем " << i << " запись\n" << "Введите фамилию и инициалы\n";
        cin >> list[i].fio;
        cout << "\nВведите должность\n"; cin >> list[i].dolzh;
        cout << "\nВведите год принятия на работу\n"; cin >> list[i].god;
    }
}
 
void mas_sort()
{
    for (int i = 0; i < 9; i++)
        for (int j = i + 1; j < 10; j++)
            if (strcmp(list[i].fio, list[j].fio) > 0) {
                char* tmp = list[i].fio;
                list[i].fio = list[j].fio;
                list[j].fio = tmp;
            }
}
 
void mas_search()
{
    int stazh; int count = 0;
    cout << "\n\n Введите стаж для поиска \n"; cin >> stazh;
 
    for (int i = 0; i < 10; i++)
    {
        if ((2015 - list[i].god) > stazh) 
        { 
            cout << "\n" << list[i].fio << ", ";
            ++count;
        };
 
        if (count == 0) cout << "\nНе найдено работников чей стаж превышает введённый";
    }
 
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    
    char *fio = new char[50];
    char *dolzhn = new char[60];
 
    mas_add();
    mas_sort();
 
    for (int i = 0; i < 10; i++)
    {
        cout << list[i].fio << "  " << list[i].dolzh << "  " << list[i].god;
    }
 
    mas_search();
 
    delete fio;
    delete dolzhn;
 
    system("pause >> void");
    return 0;
}
Сначала показывает такое окно

Нарушение прав доступа при записи по адресу


потом лезут ошибки

Первый этап обработки исключения по адресу 0x00BA2B7B в ЛАБ3.EXE: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000000.
Необработанное исключение по адресу 0x00BA2B7B в ЛАБ3.EXE: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000000.

Программа "[2136] лаб3.exe" завершилась с кодом 0 (0x0).


Я так понимаю, это связано с указателями, но в них я не разбираюсь и не понимаю в чём конкретно дело. Надеюсь на вашу помощь. Извините за глупость, я только учусь =)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2015, 12:48
Ответы с готовыми решениями:

Необработанное исключение по адресу, нарушение прав доступа при записи по адресу
вот само задание: Авиарейсы (номер рейса, пункт назначения, время вылета, дата вылета, стоимость...

Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу
Помогите, пожалуйста, исправит ошибку. Необработанное исключение по адресу 0x77D88E19 (ntdll.dll)...

Вызвано исключение по адресу 0x003F2357 в Лабораторна 15.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x
Что это такое и как это исправить? Вот фрагмент кода где и есть проблема: ... int size = 9;...

Вызвано исключение по адресу 0x01068781 в 2nd.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCCCCCCCC
Доброго времени суток, кто может помочь по вопросу? Постоянно выбивает ошибку. Мне кажется, там еще...

1
Модератор
Эксперт С++
11480 / 9398 / 5649
Регистрация: 18.12.2011
Сообщений: 25,108
02.02.2015, 13:02 2
Цитата Сообщение от ArTTo Посмотреть сообщение
char *fio = new char[50]; char *dolzhn = new char[60];
Это выделение памяти для локальных переменных fio и dolzhn.
К list[i].fio и list[i].dolzhn они не имеют НИКАКОГО отношения!

Добавлено через 1 минуту
Цитата Сообщение от ArTTo Посмотреть сообщение
C++
1
2
3
char* tmp = list[i].fio; 
list[i].fio = list[j].fio; 
list[j].fio = tmp;
Так тоже нельзя. Это копирование указателей, но не содержимого.
Кроме, того, остальные части структуры остаются на старых местах.

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
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <cstdlib>
using namespace std;
 
struct worker
{
    char fio[100];
    char dolzh[48];
    int god;
}; worker list[10];
 
void mas_add()
{
    for (int i = 0; i < 10; i++)
    {
        cout << "Заполняем " << i << " запись\n" << "Введите фамилию и инициалы\n";
        cin >> list[i].fio;
        cout << "\nВведите должность\n"; cin >> list[i].dolzh;
        cout << "\nВведите год принятия на работу\n"; cin >> list[i].god;
    }
}
 
void mas_sort()
{
    for (int i = 0; i < 9; i++)
        for (int j = i + 1; j < 10; j++)
            if (strcmp(list[i].fio, list[j].fio) > 0)
            {
                worker tmp = list[i];
                list[i] = list[j];
                list[j] = tmp;
            }
}
 
void mas_search()
{
    int stazh; int count = 0;
    cout << "\n\n Введите стаж для поиска \n"; cin >> stazh;
 
    for (int i = 0; i < 10; i++)
    {
        if ((2015 - list[i].god) > stazh) 
        { 
            cout << "\n" << list[i].fio << ", ";
            ++count;
        };
 
        if (count == 0) cout << "\nНе найдено работников чей стаж превышает введённый";
    }
 
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    
    mas_add();
    mas_sort();
 
    for (int i = 0; i < 10; i++)
    {
        cout << list[i].fio << "  " << list[i].dolzh << "  " << list[i].god;
    }
 
    mas_search();
 
    system("pause >> void");
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2015, 13:02

Вызвано исключение по адресу 0x010F2FF7 в Project25.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xFDFDF
Всплывает окно на 45ой строке с сообщением: &quot;Вызвано исключение по адресу 0x010F2FF7 в...

Нарушение прав доступа при записи по адресу
Функция для заполнения массива случайными числами ломается на матрице D. Размеры матриц A, B,C,D...

Нарушение прав доступа при записи по адресу
Функция не дописана. Исключение находит в этой begin-&gt;elem.arrint = s; нарушение прав доступа при...

Нарушение прав доступа при записи по адресу
Будьте добры подскажите, есть занятная функция которая подгружает из файлика данные, ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru