powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибки в функции реверса каждого слова строки
25 сообщений из 151, страница 4 из 7
Ошибки в функции реверса каждого слова строки
    #38568304
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Происходит проблема с доступом к памяти. Адрес конца не принципиален, отрезок в любом случае сужается. Дело не в этом, пусть будет инверс в подстроке
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568308
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПроисходит проблема с доступом к памяти.
Ты вышел за пределы строки и обратился по адресу где нет реальной памяти.
Смотри пошагово с какими параметрами ты reverse() вызываешь.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568324
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы уверены наверняка что дело в этом ?В том что я выхожу за пределы памяти для строки "Hello" ?
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568333
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury
Код: plaintext
1.
char* temp="Hello".


Не заметил сразу, тут косяк, у тебя "Hello" это массив констант и писать туда нельзя.
Объявляй как свой массив:
Код: plaintext
1.
char temp[]="Hello";
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568353
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВы уверены наверняка что дело в этом ?В том что я выхожу за пределы памяти для строки "Hello" ?
Я наверняка уверен что не обладаю телепатическими способностями. Учись информативно свои вопросы задавать. Примерно так
авторЗапускаю код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
char* reverse(char *b, char *e) {
    char* h = b;
    for(; b < --e; ++b) {
        char t = *b;
        *b = *e;
        *e = t;
    }
    return h;
}

int _tmain(int argc, _TCHAR* argv[])
{
	char* temp="Hello";
	reverse(temp,temp+4);
	return 0;
}


Получаю ошибку "Unhandled exception at 0x004113e0 in Reverse.exe: 0xC0000005: Access violation writing location 0x00415740."
на строке
Код: plaintext
1.
      *b = *e;
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568372
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, извините за плохую постановку вопроса.
Но я ведь не писал const char*. Почему он константный ?
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568379
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryХорошо, извините за плохую постановку вопроса.
Но я ведь не писал const char*. Почему он константный ?

По жизни он константный.
Более того, если бы ты пользовался более другим композитором, у тебя бы это даже не скомпилировалось.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568382
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryХорошо, извините за плохую постановку вопроса.
Но я ведь не писал const char*. Почему он константный ?

Вообще странно...
Вроде бы последняя версия VC, должны были они там уже отключить эту фичу...
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568399
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryХорошо, извините за плохую постановку вопроса.
Но я ведь не писал const char*. Почему он константный ?
ты написал chаr* temp - компилятор тебе выдал 4 байта под этот указатель. Вот эти 4 байта и меняй как хочешь. Например temp = NULL
char temp[]="Hello" это ты просишь выделить тебе 6 байт под массив и записать туда {'H', 'e', 'l', 'l', 'o', 0} тут ты имеешь полное право менять содержимое этого массива
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568404
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПочему он константный ?
потому что компилятор разместил строку "Hello" в области памяти помеченной как read-only, поэтому попытка туда что либо записать вызывает ошибку. Подробнее узнаешь когда доберешься до изучения устройства виртуальной памяти.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568465
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryХорошо, извините за плохую постановку вопроса.
Но я ведь не писал const char*. Почему он константный ?

Это компромисс на который пошел Страуструп, чтобы обеспечить компилируемость старого Си-шного кода.

Пишешь

Код: plaintext
1.
char* hello = "Hello";



Подразумеваешь

Код: plaintext
1.
const char* hello = "Hello";



Ведь "Hello" это строковая константа, которая будешь размещена в read-only сегменте и изменять которую ты не имеешь право.

Вообщем, приобрети "Дизайн и эволюция языка С++" Страуструпа, ее сейчас переиздали. Много интересного узнаешь почему та или иная языковая конструкция выглядит так или иначе.

Удачи!
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568482
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков,

Не надо мозг парить неофиту заумными книгами.

Я вообще ее не читал никогда, думаю, немного потерял. Все, что там написано, вполне очевидно.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568494
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЯ вообще ее не читал никогда, думаю, немного потерял. Все, что там написано, вполне очевидно.

Ильюша, иди в жопу. Это отлична книга. Если ты что-то не читал это не повод для гордости. "Я понятно объясняю?" (c)
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568533
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, действительно очень хорошая книга, многое приходит в порядок послее ее прочтения.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568536
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPS. Книга совсем не заумная, написана очень простым располагающим к чтению языком.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568595
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_PPS. Книга совсем не заумная, написана очень простым располагающим к чтению языком.

Ребята, я всё понимаю. Светило, и вообще, Страустрап -- наша фсё!
Но по тематике С++ (и не только) для меня лично есть дофига книг, которые я хочу прочитать.
И данная -- далеко не самая полезная. Меня лично она вообще не интересует -- книга в виде
биллетристики, о том, "как я сделал это". Он сделал хорошо, я всё это и так знаю. Детали мне не иснтересны,
я 80% их и так знаю.


Хотя...
Пожалуй, я хотел бы одну вещь выяснить. А именно, как в С++ попали шаблоны.
Ну да попали -- и попали, наплевать, как. В итоге получилось что получилось, другого не будет.

Но ЕМУ то это всё зачем?
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568664
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Толик. Вдохни глубоко. А-то скипетр власти оттягивает руку...
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568679
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТолик. Вдохни глубоко. А-то скипетр власти оттягивает руку...

Все в порядке, он уже понял свою ошибку. А ты что, хотел Илью забанить, да? ;-)
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568696
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНо ЕМУ то это всё зачем?
Беллетристика очень помогает разложить по полочкам.
SashaMercury видно что нуждается как раз в этом, ибо технических деталей уже нахватался, но пока все вместе не состыковал.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568699
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковmaytonТолик. Вдохни глубоко. А-то скипетр власти оттягивает руку...

Все в порядке, он уже понял свою ошибку. А ты что, хотел Илью забанить, да? ;-)
На неужели? А в чём была его ошибка?
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568743
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonАнатолий Широковпропущено...


Все в порядке, он уже понял свою ошибку. А ты что, хотел Илью забанить, да? ;-)
На неужели? А в чём была его ошибка?

Ну как же, решил права покачать на правах старшего - типа он де лучше знает кому и что читать. Но он так больше не будет. Простим его.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568949
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вышел с телефона, неудобно цитировать, потому спрошу так.
Исходя из каких логических соображний, или как это помогло совместимости с Си ?
Я читал в КиН что объявление выше аналогично char temp[].
Спасибо что вы советуете книги, я выписывают их на последнюю страницу тетради по Си. Когда изучу КиН начну читать алг тр для программиста и одну книгу по Си параллельно..
И еще, в последнее-время я мало думал. Но вопрос по реверсу так и остался. Есть ли другой, радикально черный цвет для решения данной задачи ?

Всем спасибо за ответы C:
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568958
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КиР*
Не знаю почему не так написал выше
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568994
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Читай внимательно. Ты перепутал. Они говорили, что нет разницы между char s[] и char* s когда это формальные параметры функции

K&R5.3
...

As formal parameters in a function definition,
char s[];
and
char *s;
are equivalent; we prefer the latter because it says more explicitly that the variable is a pointer


а при объявлении это две разных сущности:

K&R5.5
....
There is an important difference between these definitions:
char amessage[] = "now is the time"; /* an array */
char *pmessage = "now is the time"; /* a pointer */



SashaMercuryЕсть ли другой, радикально черный цвет для решения данной задачи ?


О чем ты пытаешься спросить? "Ты не умничай, пальцем покажи"
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38568997
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, вспомнил, я ошибся насчет КиР. Вы правы !
Пересматривал 12 стульев недавно, и запомнилась фраза про радикально черный-цвет усов :D
Есть ли другой метод ? Я не хочу идти даже до половины строки для реверса, я хочу сделать это в 10 раз быстрее и не в лоб. Как ? Это возможно ?
...
Рейтинг: 0 / 0
25 сообщений из 151, страница 4 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибки в функции реверса каждого слова строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]