Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
KostyaKulakov
Заблокирован
#1

Переворот строки. Необработанное исключение. Нарушения прав доступа - C++

29.08.2012, 14:24. Просмотров 1457. Ответов 29
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
void turn(char c[], int step, int size)
{
    if(step < size>>1)
    {
        char temp = c[step];
        char temp2 = c[size-step-1];
        c[step] = temp2[size-step-1];
        c[size-step-1] = temp[step];
        turn(c,++step,size);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2012, 14:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переворот строки. Необработанное исключение. Нарушения прав доступа (C++):

Необработанное исключение нарушение прав доступа - C++
Можно ли отловить исключение, которое потом выдает компилятор как &quot;необработанное исключение нарушение прав доступа&quot; Если можно, то как? ...

Необработанное исключение. Нарушение прав доступа при чтении - C++
Ребят помогите. В общем есть программа, открывает один файл, ищет в нем последовательности, заменяет на другие. В консоли все прекрасно...

Необработанное исключение: нарушение прав доступа при записи - C++
Есть функция ввода текста. Текст с неизвестным количеством и длиной строк. При отладке прерывается и выдает: &quot;Необработанное...

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

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

Необработанное исключение: "Нарушение прав доступа при чтении" - C++
При выполнении тестов {input...output} появляется необработанное исключение по адресу 0x009577E1 в 1590.exe: 0xC0000005: нарушение прав...

29
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
29.08.2012, 21:37 #16
Цитата Сообщение от Dani Посмотреть сообщение
ALL_ZZ, из-за этой строки
C++
1
char test[] = "sdfgber";
длина строки test становится равной 7. И поэтому, если ввести строку длиной больше семи, обращение к неверному индексу. если же написать так
C++
1
char test[100];
то можно будет вводить строки длиной 100.
Поймите, если так написать:
C++
1
char test[] = "здесь_строка"
это будет тоже самое, как и
C++
1
char test[длина_строки] = "здесь_эта_строка";
Да я так и думал, я же написал об этом. Но программа тем не менее выполняется, даже если я запишу туда строку длинее 7ми символов. Ошибка возникает только в конце. Вообщем, не заморачивайтесь, вы и так мне помогли)
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,290
Записей в блоге: 2
Завершенные тесты: 1
29.08.2012, 21:44 #17
ALL_ZZ, такой код у меня работает
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
#include <iostream>
#include <cstring>
 
void turn(char *c, int step, int size)
{
    if(step < size>>1)
    {
        char temp = c[step];
        char temp2 = c[size-step-1];
        c[step] = temp2;
        c[size-step-1] = temp;
        turn(c,++step,size);
    }
}
 
int main()
{
    std:: cout << "Please, type string: " ;
    char test[100] = "";
    std:: cin >> test;
    int step = 0;
    turn(test,step,strlen(test));
    
    std:: cout << test << std::endl;
    system ("pause");
    return 0;
}
1
ALL_ZZ
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 47
29.08.2012, 21:55 #18
Цитата Сообщение от Dani Посмотреть сообщение
ALL_ZZ, такой код у меня работает
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
#include <iostream>
#include <cstring>
 
void turn(char *c, int step, int size)
{
    if(step < size>>1)
    {
        char temp = c[step];
        char temp2 = c[size-step-1];
        c[step] = temp2;
        c[size-step-1] = temp;
        turn(c,++step,size);
    }
}
 
int main()
{
    std:: cout << "Please, type string: " ;
    char test[100] = "";
    std:: cin >> test;
    int step = 0;
    turn(test,step,strlen(test));
    
    std:: cout << test << std::endl;
    system ("pause");
    return 0;
}
Рад за вас) Не понимаю, что вы хотели этим сказать, я ведь не спорил с вами. Я к тому же (как вы наверно заметили) не пользуюсь iostream, потому что в лабах нельзя им пользоваться вроде бы.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2012, 22:00 #19
Цитата Сообщение от Dani Посмотреть сообщение
И поэтому, если ввести строку длиной больше семи, обращение к неверному индексу
В какой строке кода? Вопрос в том, почему ошибка возникает не при работе функции turn(), а когда функция уже отработала, выведен результат работы на консоль, и выполняется выход из main() ?
1
Миниатюры
Переворот строки. Необработанное исключение. Нарушения прав доступа  
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,290
Записей в блоге: 2
Завершенные тесты: 1
29.08.2012, 22:02 #20
alsav22, может это невидно отладкой, но все-же не так. На вашем скрине длина строки вообще 0, а вы туда еще запихнуть хотите что-то.
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2012, 22:10 #21
Это в MSVC 2010, а в mingv отрабатывает без ошибок.
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,290
Записей в блоге: 2
Завершенные тесты: 1
29.08.2012, 22:12 #22
alsav22, оно берет чужую память, чужой программы, и "умная" студия еще хоть какое-то сообщение об ошибке выдает, и, что оно еще работает - это повезло.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2012, 22:15 #23
Цитата Сообщение от Dani Посмотреть сообщение
а вы туда еще запихнуть хотите что-то.
Не только хочу, но и запихиваю, и функция отрабатывает, и вывод на консоль нормальный. В этом и суть вопроса.

Добавлено через 2 минуты
Цитата Сообщение от Dani Посмотреть сообщение
alsav22, оно берет чужую память, чужой программы, и "умная" студия еще хоть какое-то сообщение об ошибке выдает, и, что оно еще работает - это повезло.
Mingv, кстати, намного более строгий компилятор, чем студия. На нём многое, что судия позволяет компилировать, просто не проходит. Поэтому и попробовал. А тут наоборот.
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,290
Записей в блоге: 2
Завершенные тесты: 1
29.08.2012, 22:16 #24
alsav22, давайте не разводить холивар.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2012, 22:20 #25
Я понимаю, что так делать нельзя, и не доказываю обратного, но хотелось бы поподробнее узнать, что там со стеком происходит.

Добавлено через 55 секунд
Цитата Сообщение от Dani Посмотреть сообщение
alsav22, давайте не разводить холивар
Если я правильно понял, ответить на вопрос вы не можете?
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,290
Записей в блоге: 2
Завершенные тесты: 1
29.08.2012, 22:24 #26
Цитата Сообщение от alsav22 Посмотреть сообщение
Если я правильно понял, ответить на вопрос вы не можете?
сколько можно? я вам уже писал, но если вы не понимаете почитайте литературу в конце концов

Добавлено через 2 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Mingv, кстати, намного более строгий компилятор, чем студия.
ну так и что? выделение идет в разные участки памяти в MinGW и студии. да и если несколько раз запустить, тоже будет в разные участки памяти. так делать нельзя.

Программа не выдала ошибку, потому что нет проверки на границы диапазона. Если вы обратитесь к 1000000 элементу в массиве 100 это по-вашему нормально?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2012, 22:37 #27
Цитата Сообщение от alsav22 Посмотреть сообщение
Я понимаю, что так делать нельзя, и не доказываю обратного
Не достаточно?
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,290
Записей в блоге: 2
Завершенные тесты: 1
29.08.2012, 22:41 #28
что там со стеком происходит.
ответить на вопрос вы не можете
вам ответ понять/додумать сложно?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2012, 23:47 #29
Цитата Сообщение от Dani Посмотреть сообщение
вам ответ понять/додумать сложно?
Хотелось бы знающего послушать.
0
Dani
29.08.2012, 23:58     Переворот строки. Необработанное исключение. Нарушения прав доступа
  #30

Не по теме:

alsav22, слушайте, слушайте. ему сложно будет до вас не достучаться

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2012, 23:58
Привет! Вот еще темы с ответами:

Необработанное исключение: "Нарушение прав доступа при записи" - C++
Подскажите в чём проблемма происходит ошибка при выполнение программы #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; ...

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

Необработанное исключение по адресу 0x00105FD7 в Динамические структуры: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCE09 - C++
Необработанное исключение по адресу 0x00105FD7 в Динамические структуры.exe: 0xC0000005: нарушение прав доступа при чтении по адресу...

Необработанное исключение по адресу 0x00ED4891 в strings.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC - C++
Программа толком не написан, проверял ранд и возникли проблемы. Ф-ция ранд генерирует одно и тоже число, но если убрать srand(time(0));,...


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

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

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