С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
27 / 27 / 9
Регистрация: 30.04.2012
Сообщений: 132
1

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

09.11.2013, 22:38. Показов 549. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал функцию, которая находит в массиве элемент, который встречается в нем чаще остальных. Вот код:
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
int frequent(int**arr,int nRows, int nCols)
{
    int l=0,n;
    int max=0,maxI=0;
 
    int** frequency = (int**)new int[nRows*nCols][2];
    
    for (int i=0; i<nRows; i++)
        for (int j=0; j<nCols; j++)
        {
            n=-1;
            for (int k=0;k<l;k++)
                if (frequency[k][0]==arr[i][j])
                {
                    n=k;
                    break;
                }
            if (n==-1)
            {
                n=l;
                frequency[l][0]=arr[i][j];
                frequency[l][1]=1;
                l++;
            }
            else
            {
                frequency[n][0]++;
            }
            if(frequency[n][1]>max)
            {
                maxI=frequency[n][0];
                max=frequency[n][1];
            }
        }
    return maxI;
}
здесь
  • arr - массив по которому осуществляется поиск
  • frequency - массив в котором хранится количество элемента в массиве. в frequency[i][0] хранится число из arr, а в frequency[i][1] сколько раз frequency[i][0] встречается в arr.
  • l - длина frequency
остальное должно быть понятно.

на строчке
C++
1
frequency[l][0]=arr[i][j];
вылетает с ошибкой:Необработанное исключение в "0x00c846cb" в "tests.exe": 0xC0000005: Нарушение прав доступа при записи "0xcdcdcdcd".

Microsoft Visual Studio 2010 Ultimate
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2013, 22:38
Ответы с готовыми решениями:

Нарушение прав доступа в двумерном массиве
Всем привет! Я писал программу и наткнулся на проблему. Дело в том, что в этом фрагменте: Field...

Нарушение прав доступа
Выдает вот это Необработанное исключение в &quot;0x000d1e05&quot; в &quot;зпр3.exe&quot;: 0xC0000005: Нарушение прав...

Нарушение прав доступа
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения. //get - seletor,...

Указатель (нарушение прав доступа)
После того как заменяет символ выдает ошибку &quot; нарушение прав доступа&quot; (когда увеличиваю...

6
30 / 30 / 9
Регистрация: 01.11.2013
Сообщений: 63
09.11.2013, 23:27 2
Цитата Сообщение от nokados Посмотреть сообщение
вылетает с ошибкой:Необработанное исключение в "0x00c846cb" в "tests.exe": 0xC0000005: Нарушение прав доступа при записи "0xcdcdcdcd"
Измените инициализацию двумерного динамического массива:
C++
1
2
3
int** frequency = new int*[nRows*nCols];
    for(int i = 0; i < nRows*nCols; i++)
        frequency[i] = new int[2];
И не забывайте о delete[], когда работаете с памятью
0
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
09.11.2013, 23:41 3
reckless91Ерунда какая-то! При чем тут new int[2] ?? Может все же так?!!
C++
1
2
3
4
int** a=new int*[nRows];
*a=new int[nRows*nCols];
for(int i=1; i<nRows; i++)
  a[i]=a[i-1]+nCols;
0
27 / 27 / 9
Регистрация: 30.04.2012
Сообщений: 132
09.11.2013, 23:49  [ТС] 4
reckless91, Спасибо, помогло(хотя там еще 1 ошибка была). А почему
C++
1
int** frequency = (int**)new int[nRows*nCols][2];
не работает?

Добавлено через 2 минуты
Цитата Сообщение от reckless91 Посмотреть сообщение
И не забывайте о delete[], когда работаете с памятью
И внутри функции тоже что ли надо? Они как локальные, я думаю, сами удалятся..

Добавлено через 2 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
reckless91Ерунда какая-то! При чем тут new int[2]
Нет тут другой массив. размерами (nRows*nCols) шириной и 2 высотой. (или наоборот, но не суть)
А Ваш создает массив размерами nRows высотой и nCols шириной.
0
30 / 30 / 9
Регистрация: 01.11.2013
Сообщений: 63
10.11.2013, 00:00 5
Цитата Сообщение от nokados Посмотреть сообщение
И внутри функции тоже что ли надо? Они как локальные, я думаю, сами удалятся..
Да, надо). Все таки динамическая память, удаляются только локальные указатели на выделенную память, но очистка памяти при этом не происходит. Так что ручками, ручками.
0
27 / 27 / 9
Регистрация: 30.04.2012
Сообщений: 132
10.11.2013, 00:21  [ТС] 6
reckless91, а если передаются, как аргумент (в данном случае arr) тоже надо?

Добавлено через 7 минут
Я разобрался - не надо. Всем спасибо!
0
30 / 30 / 9
Регистрация: 01.11.2013
Сообщений: 63
10.11.2013, 00:24 7
Цитата Сообщение от nokados Посмотреть сообщение
а если передаются, как аргумент (в данном случае arr) тоже надо?
C++
1
2
3
4
5
6
7
8
9
10
11
int ** arr = new int*[10];
    for(i = 0; i < 10; i++)
        arr[i] = new int[10];
    
    for(i = 0; i < 10; i++)
        for(j = 0; j < 10; j++)
            arr[i][j] = 1;
 
    int nRows = 10, nCols = 10;
 
    count = frequent(arr, nRows, nCols);
Цитата Сообщение от nokados Посмотреть сообщение
int** frequency = (int**)new int[nRows*nCols][2];
не работает?
new возвращает указатель, а не указатель на указатель
0
10.11.2013, 00:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2013, 00:24
Помогаю со студенческими работами здесь

Ошибка: Нарушение прав доступа
Здравствуйте, пишу программу для минимизации канонических выражений (сумм минтермов). Проблема...

Нарушение прав доступа к записи
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;iomanip&gt; #include...

Нарушение прав доступа при чтении
Здравствуйте! При отладке выдает данную ошибку: &quot;Вызвано исключение по адресу 0x7795E314...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru