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

Нарушение правил доступа при чтении 0*00000 - C++

Восстановить пароль Регистрация
 
tcennoc
1 / 1 / 0
Регистрация: 22.11.2013
Сообщений: 35
25.11.2013, 19:52     Нарушение правил доступа при чтении 0*00000 #1
Имеется программа формирующая перестановки. В ней где то не корректно указал условия выхода работает, если установить
C++
1
if(p==0)break;
. Подскажите пожалуйста где скрывается ошибка?
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
#include<iostream>
using namespace std;
int* rec(int* r, int n);
void rec1 (int* r1,int* r2);
void rec2(int* r3,int* r4);
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian");
int* pointer=new int[5];
for(int i=0;i<5;i++)
pointer[i]=(i+1);
for(int i=0;;i++)
{
int* p=rec(pointer,5);
if(p==0)
{
cout<<"Ошибка!";
break;}
rec1(p,pointer+5);
rec2(p+1,pointer+5);
for(int i=0;i<5;i++)
cout<<pointer[i];
cout<<endl;
}
system("PAUSE");
 
    return 0;
}
 
int* rec(int* r, int n)
{
for(int i=n-1;i>0;i--)
{
if(r[i]>r[i-1])
return (r+i-1);
}
}
void rec1 (int* r1,int* r2)
{
int* pt;
if(r1==0)
return;
for(pt=r2-1;pt>r1;pt--)
{
if(*pt>*r1)
{
int temp=*pt;
*pt=*r1;
*r1=temp;
break;
}
}
}
void rec2(int* r3,int* r4)
{
 
int* pt;
for(int i=0;i<5;i++)
{
for(pt=r4-1;pt>r3;pt--)
{
if(*pt<*(pt-1))
{
int temp=*pt;
*pt=*(pt-1);
*(pt-1)=temp;
}
}
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 19:52     Нарушение правил доступа при чтении 0*00000
Посмотрите здесь:

Нарушение прав доступа при чтении C++
Нарушение прав доступа при чтении C++
C++ Ошибка: нарушение прав доступа при чтении
C++ Нарушение прав доступа при чтении
Нарушение прав доступа при чтении C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Angeline
36 / 30 / 2
Регистрация: 21.10.2013
Сообщений: 197
25.11.2013, 21:18     Нарушение правил доступа при чтении 0*00000 #2
tcennoc, такая ошибка возникает обычно при неправильном выделении памяти.
tcennoc
1 / 1 / 0
Регистрация: 22.11.2013
Сообщений: 35
25.11.2013, 21:23  [ТС]     Нарушение правил доступа при чтении 0*00000 #3
Цитата Сообщение от Angeline Посмотреть сообщение
tcennoc, такая ошибка возникает обычно при неправильном выделении памяти.
Насколько я понял указатель p начинает где-то указывать за границу массива, наверное в функции rec. Но почему?
recoder
 Аватар для recoder
129 / 129 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
25.11.2013, 21:26     Нарушение правил доступа при чтении 0*00000 #4
for(int i=0;;i++) так и должно быть?
for(int i=0; условие ;i++) и будет работать
tcennoc
1 / 1 / 0
Регистрация: 22.11.2013
Сообщений: 35
25.11.2013, 21:30  [ТС]     Нарушение правил доступа при чтении 0*00000 #5
Цитата Сообщение от recoder Посмотреть сообщение
for(int i=0;;i++) так и должно быть?
ну да. Если поставить i<119 понятно будет останавливаться где нужно.Там, что-то с ф-цией rec вроде. Тестировал ее отдельно выдает эту ошибку, а вместе все работает если накладывать внешние ограничения, но хотелось понять, что в функции не так или может в других функциях куда передается p.
Angeline
36 / 30 / 2
Регистрация: 21.10.2013
Сообщений: 197
25.11.2013, 21:30     Нарушение правил доступа при чтении 0*00000 #6
К примеру при первом проходе цикла в rec возвращается значение адреса за пределами массива. Второй проход не смотрела, но там думаю тоже будет так.
tcennoc
1 / 1 / 0
Регистрация: 22.11.2013
Сообщений: 35
25.11.2013, 21:41  [ТС]     Нарушение правил доступа при чтении 0*00000 #7
Цитата Сообщение от Angeline Посмотреть сообщение
К примеру при первом проходе цикла в rec возвращается значение адреса за пределами массива. Второй проход не смотрела, но там думаю тоже будет так.
Такого не может быть, там крайний адрес p[0] возвращается, т.к. i>0. Cоответствено i-1==p[0];
Angeline
36 / 30 / 2
Регистрация: 21.10.2013
Сообщений: 197
25.11.2013, 22:07     Нарушение правил доступа при чтении 0*00000 #8
tcennoc, а, ну да, туплю, r, как элемент текущий считала.
tcennoc
1 / 1 / 0
Регистрация: 22.11.2013
Сообщений: 35
25.11.2013, 22:23  [ТС]     Нарушение правил доступа при чтении 0*00000 #9
Цитата Сообщение от Angeline Посмотреть сообщение
tcennoc, а, ну да, туплю, r, как элемент текущий считала.
Бывает. А, может быть такое: если при p[0] if не выполняется, например 54321 значит возвращать нечего и поэтому присваевающему указателю p присваивается 0*00000 ? Скорее всего так и есть!!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2013, 22:31     Нарушение правил доступа при чтении 0*00000
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Angeline
36 / 30 / 2
Регистрация: 21.10.2013
Сообщений: 197
25.11.2013, 22:31     Нарушение правил доступа при чтении 0*00000 #10
tcennoc, скорее всего. Ты сделай вывод того, что return делаешь.
Yandex
Объявления
25.11.2013, 22:31     Нарушение правил доступа при чтении 0*00000
Ответ Создать тему
Опции темы

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