|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.11.2009, 02:18 | #1 |
Регистрация: 02.08.2008
Сообщений: 9
|
char* и вопрос о смещениях
char* str = "some text";
*(str+1) = 'T'; Объясните пожалуйста, почему компилятор компилирует код без вопросов, а при выполнении выходит сообщение об ошибке: Unhandled exception at 0x000c13d8 in ConsoleTest.exe: 0xC0000005: Access violation writing location 0x000c580a. |
25.11.2009, 08:04 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Проверил на Борланд С++
Код:
I'm learning to live...
|
25.11.2009, 10:54 | #3 | |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Цитата:
а вот так будет работать Код:
|
|
25.11.2009, 11:39 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
25.11.2009, 11:54 | #5 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Stilet
Код:
Соответственно, имеем указатель на константую строку. Вообще правильней писать так: Код:
Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
25.11.2009, 14:24 | #6 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Мне кажется, всё проще - в первой строке программа пытается записать в нераспределённую память.
P. S. проверил в компляторе - я ошибся. Похоже, pproger был прав. Последний раз редактировалось ds.Dante; 25.11.2009 в 14:27. |
25.11.2009, 14:57 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
А вот если я действительно пропишу const char* тогда да.
I'm learning to live...
|
|
25.11.2009, 15:33 | #8 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Stilet
Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
25.11.2009, 17:59 | #9 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
В принципе действительно это зависит от компилятора и настроек линкера. Видимо борланд распределяет константы в секции с меткой readable и writeable, в то время, как студия помечает только readable. Вообще много видел споров на тему, где же именно должны размещаться константы, но исходя из семантики, константы действительно должны быть недоступны для записи
Последний раз редактировалось netrino; 25.11.2009 в 18:23. |
25.11.2009, 19:22 | #10 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Stilet
Цитата:
возможность присваивания строкового литерала к char* осталась лишь для совместимости со старым сишным кодом. Но да, как уже написали и как говорил Страуструп, разные реализации по разному относятся к нарушению этого правила.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка cannot convert from 'char *' to 'char [100]' | Stellvertreter | Общие вопросы C/C++ | 5 | 30.05.2010 00:02 |
Вопрос по char* | and277 | Общие вопросы C/C++ | 7 | 11.10.2009 20:39 |
FastString::FastString(const char *psz) : m_psz(new char [strlen(psz) + 1]) { strcpy(m_psz, psz); } | lebedun | Общие вопросы C/C++ | 3 | 27.03.2009 03:43 |
отличие char* str ="..." от char ...[]="..." | StarWorm | Общие вопросы C/C++ | 2 | 20.11.2008 08:48 |
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql | Muahahaha | PHP | 8 | 27.03.2008 11:17 |