Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 26.11.2021
Сообщений: 8

Выдает в коде Необработанное исключение 0xC0000005: нарушение прав доступа при записи как это исправить?

29.11.2021, 01:35. Показов 2543. Ответов 8

Студворк — интернет-сервис помощи студентам
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <clocale>
#include <cstdlib>
#include <ctime>
#include <Windows.h>
 
using namespace std;
 
 
 
 
//рандомное число в заданных пределах
int getRandomNumber(int min, int max)
{
    static const double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0);
    // Равномерно распределяем рандомное число в нашем диапазоне
    return static_cast<int>(rand() * fraction * (max - min + 1) + min);
}
//Выделение памяти
int** Create(size_t n, size_t m) {
    int** M = new int* [n];
    for (size_t i = 0; i < n; ++i) {
        M[i] = new int[m];
    }
    return M;
}
 
//Увольнение памяти
void Free(int** M, size_t n) {
    for (size_t i = 0; i < n; ++i) {
        delete[] M[i];
    }
    delete[] M;
}
//заполнение элементов матрицы в диапазоне от -10 до 10
void Random(int** matrix, const size_t rows, const size_t columns)
{
    srand(time(0)); 
 
    for (size_t row = 0; row < rows; row++)
        for (size_t column = 0; column < columns; column++)
            matrix[row][column] = getRandomNumber(-10,10);
}
//вывод матрицы на экран
 
void Print(int** M, size_t n, size_t m) {
    for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < m; ++j) {
            cout << M[i][j] << "\t";
        }
        cout << endl;
    }
}
//Задание
void zavdanna(int** M, size_t n, size_t m) {
    int *arr[20] ;
    int k{-1}, pr{ 0 };
    cout << "Непарні від'ємні елементи матриці" << endl;
    for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < m; ++j) {
             pr = M[i][j] % 2;
            if (pr == -1)
            {
                k++;
                *arr[k] = M[i][j];//[B]Тут выдает исключение[/B]
                cout << k <<  "element masuvy = " << arr[k] << "\n";
            }
        }
    }
    
}
int main()
{
    SetConsoleOutputCP(1251);//від укр мови за допомогою Cout
    SetConsoleCP(1251);
 
    int** A;
    int** B;
    int** C;
 
     A = Create(5, 4);
     B =  Create(3, 2);
     C =  Create(4, 4);
     
     Random(A,5,4);
     Random(B,3,2);
     Random(C,4,4);
 
     cout << "Матриця А" << endl;
     Print(A, 5, 4);
     cout << endl;
 
 
     zavdanna(A, 5, 4);
     cout << endl;
 
     cout << "Матриця В" << endl;
     Print(B, 3, 2);
     cout << endl;
    zavdanna(B, 3, 2);
     cout << endl;
 
     cout << "Матриця С" << endl;
     Print(C, 4, 4);
     cout << endl;
 
 
     zavdanna(C, 4, 4);
     cout << endl;
 
 
 
     Free(A, 5);
     Free(B, 3);
     Free(C, 4);
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.11.2021, 01:35
Ответы с готовыми решениями:

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

Необработанное исключение по адресу 0x008B94C5. 0xC0000005: нарушение прав доступа при чтении по
Здравствуйте! Функция должна искать локальные минимумы массива. То есть это элементы,которые меньше своих соседей. Дело в том,что функция...

Необработанное исключение по адресу 0x00E730CD в ConsoleApplication18.exe: 0xC0000005: нарушение прав доступа при чтении
Задана целочисленная динамическая матрица M. Элементы этой матрицы, без остатка делящиеся на 6, переписать в динамический массив L и найти...

8
29.11.2021, 01:59

Не по теме:

dangion, напишите условие задачи

0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
29.11.2021, 02:46
Лучший ответ Сообщение было отмечено dangion как решение

Решение

dangion,
C++
56
57
    int *arr[20] ;
    int k{-1}, pr{ 0 };
массив из 20 указателей, ничем не инициализированный.
и чуть ниже, вы пытаетесь разыменовать эти (мусорные) указатели.
C++
65
                *arr[k] = M[i][j];//[B]Тут выдает исключение[/B]
Результат вполне ожидаемый.
1
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
29.11.2021, 08:22
dangion, Вам совсем не нужен этот массив.
C++
1
               cout << k <<  " element masuvy = " << M[i][j] << "\n";
1
1 / 1 / 0
Регистрация: 26.11.2021
Сообщений: 8
29.11.2021, 13:47  [ТС]
условие задачи :
разработать функцию, которая записывает отрицательные нечетные числа в одномерный массив, и применить ее для обработки матриц А(5,4),В(3,2),С(4,4)

Добавлено через 1 минуту
условие задачи не позволяет

Добавлено через 54 секунды
zss

Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void zavdanna(int** M, int* arr[20], size_t n, size_t m) {
 
    int k{-1}, pr{ 0 };
    cout << "Непарні від'ємні елементи матриці" << endl;
    for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < m; ++j) {
             pr = M[i][j] % 2;
            if (pr == -1)
            {
                k++;
                arr[k] = &M[i][j];
                cout << k <<  "element masuvy = " << *arr[k] << "\n";
            }
        }
    }
    
}
Я немного переписал теперь все работает правильно
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
29.11.2021, 14:32
dangion,
Цитата Сообщение от dangion Посмотреть сообщение
void zavdanna(int** M, int* arr[20], size_t n, size_t m)
Это тоже довольно стремно.
Если уж через параметры передавать ссылки/указатели для результата, то уже по полной
C++
1
void zavdanna(int** M, int* res, size_t n, size_t m, size_t res_size, size_t &res_data_size)
А сама функция может быть более гибкой.
Если использовать динамический массив для результата.
Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
 
struct odd_neg_t{
   int    size = 0;
   int * arr = nullptr;
   ~odd_neg_t(){delete [] arr;};
};
bool is_odd_and_neg(int num){
    return (num < 0) && (num%2 != 0);
}
odd_neg_t zavdanna(int** M, size_t n, size_t m){
    odd_neg_t res;
    res.arr = new int[n*m];
    for (size_t i = 0; i < n; ++i) 
        for (size_t j = 0; j < m; ++j)
            if ( is_odd_and_neg(M[i][j]) )
                res.arr[res.size++] = M[i][j];
    return res;
}
int main()
{
    const int n = 5, m = 4;
    int** M = new int* [n];
    for (size_t i = 0; i < n; ++i) {
        M[i] = new int[m];
    }
    for (size_t i = 0; i < n; ++i) 
        for (size_t j = 0; j < m; ++j)
            M[i][j] = (i+j) * (i%2==0 ? -1 : 1);
    odd_neg_t neg = zavdanna(M, n, m);
    for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < m; ++j)
            cout << M[i][j] << ' ';
        cout << endl;
    }
    cout << endl;
    for (int i = 0; i < neg.size; ++i)
        cout << neg.arr[i] << ' ';
    // delete M !
    // neg is destructed byself
    return 0;
}


Добавлено через 6 минут
C++
1
2
3
4
5
struct odd_neg_t{
   int    size = 0;
   int * arr = nullptr;
   ~odd_neg_t(){delete [] arr;};
};
Пример того как не нужно писать классы.
Потому что в нем не хватает методов для полноценной работы.
А именно : соблюдение Правила трех.
Нарушение правила ТРЕХ.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
29.11.2021, 15:18
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
//#include <clocale>
//#include <cstdlib>
#include <ctime>
#include <Windows.h>
using namespace std;
 
//рандомное число в заданных пределах
int getRandomNumber(int min, int max)
{
    static const double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0);
    // Равномерно распределяем рандомное число в нашем диапазоне
    return static_cast<int>(rand() * fraction * (max - min + 1) + min);
}
//Выделение памяти
int** Create(size_t n, size_t m) {
    int** M = new int* [n];
    for (size_t i = 0; i < n; ++i) {
        M[i] = new int[m];
    }
    return M;
}
 
//Увольнение памяти
void Free(int** M, size_t n) {
    for (size_t i = 0; i < n; ++i) {
        delete[] M[i];
    }
    delete[] M;
}
//заполнение элементов матрицы в диапазоне от -10 до 10
void Random(int** matrix, const size_t rows, const size_t columns)
{
 
    for (size_t row = 0; row < rows; row++)
        for (size_t column = 0; column < columns; column++)
            matrix[row][column] = getRandomNumber(-10,10);
}
//вывод матрицы на экран
 
void Print(int** M, size_t n, size_t m) {
    for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < m; ++j) {
            cout << M[i][j] << "\t";
        }
        cout << endl;
    }
}
//вывод массива на экран
 
void Print(int* M, size_t n) 
{
    for (size_t i = 0; i < n; ++i)
        cout << M[i] << "\t";
    cout << endl;
}
//Задание
int zavdanna(int** M,int* arr,size_t n, size_t m) 
{
    int k=0;
    for (size_t i = 0; i < n; ++i) 
        for (size_t j = 0; j < m; ++j) 
            if( M[i][j]<0 && M[i][j] % 2!=0)
                arr[k++] = M[i][j];
    return k;
}
//   функция обработки
void ff(int** A,int n,int m)
{
    Random(A,n,m);
    Print(A, n, m);
    int* elem=new int[n*m];
    int k=zavdanna(A,elem, n, m);
    cout << "Непарні від'ємні елементи матриці" << endl;
    Print(elem,k);
    cout << endl;
    delete[] elem;
 
}
 
 
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
 
    srand((unsigned)time(0)); 
 
    int** A=Create(5,4);
    cout << "Матрица A" << endl;
    ff(A,5,4);
    Free(A, 5);
 
    int** B=Create(3,2);
    cout << "Матрица B" << endl;
    ff(B,3,2);
    Free(B, 3);
 
    int** C=Create(4,4);
    cout << "Матрица C" << endl;
    ff(C,4,4);
    Free(C, 4);
 
    return 0;
}
p.s. В принципе в функцию ff передавать A,B,C вовсе не обязательно.
Они не используются вне ее.
Но стоит оставить для соответствия постановке задачи.
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
29.11.2021, 15:32
zss, вы слишком добры, надо было все же оставить эту реализацию для самообработки автору.
Или пусть сдавал бы со int *arr[20]
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
29.11.2021, 17:21
SmallEvil, я рассмотрел эту тему исключительно по причине того, что ТС взял за образец
Образцы (шаблоны) программ для типовых задач
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.11.2021, 17:21
Помогаю со студенческими работами здесь

Необработанное исключение по адресу 0x004490F8 в ConsoleApplication1.exe: 0xC0000005: нарушение прав доступа при чтении
Я реализую дерево. Хочу добавить элемент через указание ссылки на родителя. Но непонятно почему я получаю исключение в классе Tree, 14...

Необработанное исключение по адресу 0x00EB1F23 в ConsoleApplication49.exe: 0xC0000005: нарушение прав доступа при чтении
В функции Max выдает такую ошибку на строчке с int Z Необработанное исключение по адресу 0x00EB1F23 в ConsoleApplication49.exe:...

Ошибка при компиляции. Необработанное исключение по адресу 0x00216B87 в Project1.exe: 0xC0000005: нарушение прав доступа
Необработанное исключение по адресу 0x00216B87 в Project1.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xFDFDFE15. ...

Необработанное исключение по адресу 0x7C5101C9 (ucrtbased.dll) в EXAM.exe: 0xC0000005: нарушение прав доступа при записи
Доброго времени суток. Необходимо переписать данные структуры в файл и после прочитать. Не могу понять, где допустила ошибку, при...

Ошибка: "Необработанное исключение: 0xC0000005: Нарушение прав доступа при записи"
мной написана программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &quot;mpi.h&quot; #include &lt;ctime&gt; #include &lt;time.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru