Здравствуйте, mukos, Вы писали:
M> char* o="omomom"; M> *o='i'; //Access violation
M> //Указатель то валидный
M> int * i=(int*)o; M> *i=100; //Access violation
M> //Почему собственно?
M> Ответ ,ясный перец, гдето в стандарте но где?
...
char *p = "abc";
defines p with type ``pointer to char'' and initializes it
to point to an object with type ``array of char'' with
length 4 whose elements are initialized with a character
string literal. If an attempt is made to use p to modify
the contents of the array, the behavior is undefined.
...
Насколько я знаю подобные объявления были разрешены только для совместимости с ранними версиями C.
The last good thing written in C was Franz Schubert's Symphony No. 9.
Здравствуйте, mukos, Вы писали:
M> char* o="omomom"; M> *o='i'; //Access violation
M> //Указатель то валидный
M> int * i=(int*)o; M> *i=100; //Access violation
M> //Почему собственно?
M> Ответ ,ясный перец, гдето в стандарте но где?
Если все же хочешь менять строку то используй конструкцию вида:
Здравствуйте, aton, Вы писали:
A>Здравствуйте, mukos, Вы писали:
M>> char* o="omomom"; M>> *o='i'; //Access violation
M>> //Указатель то валидный
M>> int * i=(int*)o; M>> *i=100; //Access violation
M>> //Почему собственно?
M>> Ответ ,ясный перец, гдето в стандарте но где?
A>"omomom" лежит в сегменте данных, страницы памяти которого помечены как read-only, A>поэтому и кидается исключение
Это типа так положено для таких переменных?
Или это реализация компилятора?
Весь мир — Кремль, а люди в нем — агенты
Re[3]: Указатели
От:
Аноним
Дата:
06.10.05 06:51
Оценка:
Здравствуйте, mukos, Вы писали:
A>>"omomom" лежит в сегменте данных, страницы памяти которого помечены как read-only, A>>поэтому и кидается исключение
M>Это типа так положено для таких переменных? M>Или это реализация компилятора?
Будшь смеяться, и то и другое Стандарт вроде предписывает константность... Но не все компиляторы кладут дынные в Read-Only страницы.