Re: Указатели
От: aton Россия http://ruby.inuse.ru
Дата: 05.10.05 16:29
Оценка: 9 (2) +2
Здравствуйте, mukos, Вы писали:

M> char* o="omomom";

M> *o='i'; //Access violation

M> //Указатель то валидный


M> int * i=(int*)o;

M> *i=100; //Access violation

M> //Почему собственно?


M> Ответ ,ясный перец, гдето в стандарте но где?


"omomom" лежит в сегменте данных, страницы памяти которого помечены как read-only,
поэтому и кидается исключение
Re: Указатели
От: crable США  
Дата: 05.10.05 14:16
Оценка: 2 (2) +1
Здравствуйте, 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.
Re: Указатели
От: pavel_turbin  
Дата: 05.10.05 18:40
Оценка: 1 (1)
Здравствуйте, mukos, Вы писали:


M> Ответ ,ясный перец, гдето в стандарте но где?


где-то в read-only.
Указатели
От: mukos Голландия  
Дата: 05.10.05 13:56
Оценка:
char* o="omomom";
*o='i'; //Access violation

//Указатель то валидный

int * i=(int*)o;
*i=100; //Access violation

//Почему собственно?

Ответ ,ясный перец, гдето в стандарте но где?
Весь мир — Кремль, а люди в нем — агенты
Re: Указатели
От: _nn_ www.nemerleweb.com
Дата: 05.10.05 14:09
Оценка:
Здравствуйте, mukos, Вы писали:
M>    char* o="omomom";
M>    *o='i';           //Access violation

M>       //Указатель то валидный

M>    int * i=(int*)o;
M>    *i=100;           //Access violation

M>    //Почему собственно?

M>    Ответ ,ясный перец, гдето в стандарте но где?

По стандарту у строки тип const char* const, т.е. она не меняемая.
Поэтому ваш код некоректен.
Правильно писать так:
const char* a = "abcd";
// a[0] = 'i'; // Ошибка компиляции, что и должно быть
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Указатели
От: SIO Украина  
Дата: 05.10.05 15:07
Оценка:
Здравствуйте, mukos, Вы писали:

M> char* o="omomom";

M> *o='i'; //Access violation

M> //Указатель то валидный


M> int * i=(int*)o;

M> *i=100; //Access violation

M> //Почему собственно?


M> Ответ ,ясный перец, гдето в стандарте но где?

Если все же хочешь менять строку то используй конструкцию вида:

char o[]="omomom";
*o='i';
Re[2]: Указатели
От: mukos Голландия  
Дата: 06.10.05 06:08
Оценка:
Здравствуйте, 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 страницы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.