Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
1

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

27.11.2013, 00:04. Просмотров 549. Ответов 3
Метки нет (Все метки)

подскажите почему возникает ошибка

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
void ChangeBrightness(HDC hdc, RECT In, RECT Out, DWORD Mode, double N)
{
    int i; int j;
    int x = 0; int y = 0;
    TRGB rgb;
    int Width = In.right-In.left; int Height = In.bottom-In.top;
    TRGB **RGBAR = (TRGB **) malloc(Width*sizeof(TRGB*));
    for(i=0;i<Width;i++)
        RGBAR[i] = (TRGB*) malloc(Height*sizeof(TRGB));
    switch(Mode)
    {
        case MUL:
            {
                for(i=In.left;i<=In.right;i++)
                {
                    for(j=In.top;j<In.bottom;j++)
                    {
                        rgb = GetRGBValues(GetPixel(hdc,i,j));
                        RGBAR[x][y].RED = Round(rgb.RED*N) % 255;
                        RGBAR[x][y].GREEN = Round(rgb.GREEN*N) % 255;
                        RGBAR[x][y].BLUE = Round(rgb.BLUE*N) % 255;
                        y++;
                    }
                    x++;
                    y = 0;
                }
            } break;
        case ADD:
            {
                for(i=In.left;i<=In.right;i++)
                {
                    for(j=In.top;j<=In.bottom;j++)
                    {
                        rgb = GetRGBValues(GetPixel(hdc,i,j));
                        RGBAR[x][y].RED = Round(rgb.RED+N) % 255;
                        RGBAR[x][y].GREEN = Round(rgb.GREEN+N) % 255;
                        RGBAR[x][y].BLUE = Round(rgb.BLUE+N) % 255;
                        y++;
                    }
                    x++;
                    y = 0;
                }
            } break;
        default: return;
    }
    for(i=Out.left;i<=Out.right;i++)
        for(j=Out.top;j<=Out.bottom;j++)
            SetPixel(hdc,i,j,RGB(RGBAR[i][j].RED,RGBAR[i][j].GREEN,RGBAR[i][j].BLUE));
}
ошибка возникает после компиляции при использовании этой функции... прямо таки не знаю почему пошаговка ничего не дала, только то где ошибка, но это и так там останавливается при ошибке...

п.с. причем даже так, при пошаговке видно что ошибка возникает не при первом прохождении цикла, т.е. крутится крутится цикл и вдруг ошибка

Добавлено через 3 минуты
сама ошибка звучит так: Необработанное исключение в "0x00411adb" в "lab4.exe": 0xC0000005: Нарушение прав доступа при записи "0xfdfdfdfd".

Добавлено через 4 часа 30 минут
ну помогите же елки палки никак !

Добавлено через 5 минут
при отладке по брейкам замечено следующее при прохождении цикла (там где case MUL, ну в зависимости от того что используешь) на элементе RGBAR[290][0] (290 - для конкретно заданного ректа просто получается значение Width) вылазит эта ошибка, т.е. при присвоении ему... почему убей не пойму
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2013, 00:04
Ответы с готовыми решениями:

Нарушение прав доступа при записи
Здравствуйте! Я новичок на вашем форуме, буду рад различного рода советам, относящимся к нему. ...

Нарушение прав доступа при записи
Подскажите, пожалуйста, почему при запуске такой программы(она должна в файле подсчитывать...

Нарушение прав доступа при записи (работа с файлами)
вообщем такая проблема (на скринах),если я правильно понял то что то с переменной не так. прощу...

Нарушение прав доступа при записи по адресу 0x00007430
Подскажите, пожалуйста, почему при выполнении программы появляется Вызвано исключение по адресу...

Ошибка: нарушение прав доступа при записи по адресу
Надо написать следующую программу: дан символьный массив из 101 элемента. По спецификации %s...

3
vua72
418 / 417 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
27.11.2013, 02:56 2
скорее всего выделено памяти меньше чем нужно, проверьте выделение памяти под этот массив.
1
Kuzia domovenok
2431 / 2158 / 528
Регистрация: 25.03.2012
Сообщений: 7,778
Записей в блоге: 1
27.11.2013, 03:07 3
Почему везде идет обращение к RGBAR[x][y], а затем внезапно обращаешься к RGBAR[i][j], хотя эти индексы начинаются отнюдь не с нуля?
1
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
27.11.2013, 09:31  [ТС] 4
Цитата Сообщение от vua72 Посмотреть сообщение
скорее всего выделено памяти меньше чем нужно, проверьте выделение памяти под этот массив.
чисто ради интереса прибавил к Width единицу и все заработало спасибо, хотя вообще не могу понять почему так выходит...

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Почему везде идет обращение к RGBAR[x][y], а затем внезапно обращаешься к RGBAR[i][j], хотя эти индексы начинаются отнюдь не с нуля?
а вот здесь вы абсолютно правы, изначально везде была ошибочная индексация массива по i,j, потом до меня это дошло, но исправил не везде (забыл 3 цикл)

в общем исправленный код таков:

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
void ChangeBrightness(HDC hdc, RECT In, RECT Out, DWORD Mode, double N)
{
    int i; int j;
    int x = 0; int y = 0;
    TRGB rgb;
    int Width = In.right-In.left+1; int Height = In.bottom-In.top;
    TRGB **RGBAR = (TRGB **) malloc(Width*sizeof(TRGB*));
    for(i=0;i<Width;i++)
        RGBAR[i] = (TRGB*) malloc(Height*sizeof(TRGB));
    switch(Mode)
    {
        case MUL:
            {
                for(i=In.left;i<=In.right;i++)
                {
                    for(j=In.top;j<In.bottom;j++)
                    {
                        rgb = GetRGBValues(GetPixel(hdc,i,j));
                        RGBAR[x][y].RED = Round(rgb.RED*N) % 255;
                        RGBAR[x][y].GREEN = Round(rgb.GREEN*N) % 255;
                        RGBAR[x][y].BLUE = Round(rgb.BLUE*N) % 255;
                        y++;
                    }
                    x++;
                    y = 0;
                }
            } break;
        case ADD:
            {
                for(i=In.left;i<=In.right;i++)
                {
                    for(j=In.top;j<=In.bottom;j++)
                    {
                        rgb = GetRGBValues(GetPixel(hdc,i,j));
                        RGBAR[x][y].RED = Round(rgb.RED+N) % 255;
                        RGBAR[x][y].GREEN = Round(rgb.GREEN+N) % 255;
                        RGBAR[x][y].BLUE = Round(rgb.BLUE+N) % 255;
                        y++;
                    }
                    x++;
                    y = 0;
                }
            } break;
        default: return;
    }
    x = 0; y = 0;
    for(i=Out.left;i<=Out.right;i++)
    {
        for(j=Out.top;j<=Out.bottom;j++)
        {
            SetPixel(hdc,i,j,RGB(RGBAR[x][y].RED,RGBAR[x][y].GREEN,RGBAR[x][y].BLUE));
            y++;
        }
        x++;
        y = 0;
    }
}
ошибок не вызывает, но ! конечно полученное изображение уж очень сильно отличается от исходного... т.е. если в исходном везде шел фоновый в основном зеленый цвет, то на полученном изображение идет какое то чередование цветов:красный, синий, сиреневый, черный... не уверен что так и должно быть

Добавлено через 2 минуты
п.с. но сам метод изменения яркости вообще то взят из методички...

Добавлено через 1 минуту
Кликните здесь для просмотра всего текста
Изменение яркости цветного изображения. Производится путем либо умножения каждой цветовой компоненты на коэффициент либо сложением с константой: R=(r*k) mod 255; R=(r+c)mod 255. Аналогично для G, B- Сравнить оба способа, изменять значения k и с, следить за спектром (сравнивать спектральные гистограммы исходного и полученных изображений). Сделать вывод на основании оценки результирующих изображений и спектральных гистограмм.


Добавлено через 3 минуты
п.с. т.е. тут вообще мне больше напоминает инвертирование цветов...

Добавлено через 4 минуты
опа ! оказывается многое зависило от того сколько прибавлять когда прибавлял 5-10 получалась ерунда, а вот прибавил 1000 получил исходное изображение
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2013, 09:31

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

Нарушение прав доступа при записи по адресу 0х00000000 при добавлении элемента структуры
прошу помощи, выбивает эту ошибку при добавлении элемента структуры, также приму во внимание другие...

Динамические массивы: Нарушение прав доступа при записи по адресу 0xCCCCCCCC
При запуске возникает ошибка &quot;Нарушение прав доступа при записи по адресу 0xCCCCCCCC&quot;. Помогите...


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

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

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