|
переменная р - это для наших, привычных, платформ всего лишь 4 байта (ну или 8). странно было бы если б передав копию этих 4х байт их нельзя было б после этого прочитать. тем более оказывается что якобы
free (p);
if (p==0) // здесь возникает UB
нельзя, а
free (p);
p=0;
можно. читать нельзя, писать можно. цирк.
нет, я его не оценил, ты несколько опережаешь события. сначала нужно в него поверить![]()
ну тут уже вопрпс философский
что тебе нужно чтоб "поверить"?
допустим верю ли я в существование австралии?
я там никогда не был, и своими глазами ее не видел, и тем не менее я в существование австралии верю
а ты?
ничего убеждающего там нет. всего лишь говорится о том, любой шаг в сторону памяти - через дескриптор. и что дескриптор содержит размер куска памяти. и что попадание в правильный диапазон контролируется аппаратно и отключить контроль нельзя. ну и что же?
подразумевается что free "убивает" дескриптор и его нельзя прочитать?
а записать видимо можно, да?![]()
ну вот тебе собственно еще.
http://groups.google.de/group/comp.l...02a893c28d22f1
цитата:
______________
he Intel C compiler. Ca 1990. When compiling with 48 bit pointers, with
an underlying real-time kernal.
> And how exactly it "did not work"?
Something along the lines of:
free( p ) ;
if ( p == NULL ) // ...
for example, would cause a system crash.
____________
ну что австралия существует?![]()
ну а почему там так? да потому, что там маллок выделяет память сегментами, а фри, в частности, убивает дескриптор сегмента. видимо указатель содержит как сегмент так и смещение. и сегмент становиться невалидным. ну так это ж изврат, зачем же так себя насиловать.
никто, я думаю, тут с таким извратом не сталкивался и дай бог не столкнется
зыЖ и если такие извраты узаконивают (а точнее прописывают такую расплывчатую формулировку,
что попустительствуют таким нехорошим редискам) - так от этого еще хуже
во первых кто то уже сталкивался, конкретно посмотри в ссылке стоит имя и фамилия человека. того который сталкивался.
далее, ну что это за аргументация такая
зачем нам вспоминать Бога, когда есть стандарт в котором черным по белому написано.
хотя еще раз говорю, вопрос верю не верю, "дай бог" это вопрос философский
для меня это прикол был и остается, я лично с этим никогда не сталкивался. но интерес чисто академический у меня к таким вещам есть.
и это для меня прикол.
Бог здесь не причем.
Последний раз редактировалось Ull9; 03.12.2007 в 15:58.
ну, не надо придираться к оборотам речи.
если некие товарищи превращают указатель из простого типа в комплексный, и смешивают понятие виртуальной памяти и кучи, навязывая маллоку (суть менеджеру кучи) поведение аллокатора виртуальной памяти - то кто им злобный буратина кроме их самих. а авторы стандарта потакают.
нну так как? твои сомнения о том что такое существует и такое законно с точки зрения стандарта, сняты?
![]()
что ж, можно и зайца научить курить. а что с того?
ты б привел сразу, что "вот так и так" - есть такая двусмысленная фраза в стандарте и "оказываеццо!" нашлись таки оригиналы, которые подвесили дескриптор сегмента в указатель, превратив его в комплексный тип.
так нет же - хочешь чтоб простые люди, привыкшие к компиляторам, написанным (и к счастью) вменяемыми разработчиками вот так, по творим 2 строкам дошли до такой же оригинальной реализации указателей?
на двусмысленности законов живут целые кланы - юристы, адвокаты и т.д. теперь, видимо не только они.
я хочу и хотел лишь одного. попался мне на глаза прикол. его здесь рассказал.
теоретически, кстати, нельзя исключать, что тебе или мне, придется на некой платформе работать где так и будет.
или что следующая версия gcc будет так себя вести.
единственное чему жизнь учит - никогда не говори никогда.
но это уже философия![]()
ну, если в той дискуссии, на которую ты ссылаешься пример кода выглядит так как они привели
то эту дискуссию можно отправлять туда же куда и переписку Энгельса с Каутским.Something along the lines of:
free( p ) ;
if ( p == NULL ) // ...С Интель-компилятором я работал, в таких глюках его не замечал. Хотя, даже если такой глюк и есть - это не повод объявлять его фичей.
Пусть мне кто-нибудь покажет воспроизводимый пример такой "фичи" + мнение разработчика этого компилятора, что это не баг а именно фича. Причем компайлер/библиотека должны пройти соответствующие conformance testing. Ибо стандарт это не только строчки документа но и набор тестов.
А вообще конечно прикольно, оказывается можно и так трактовать стандарты...
Может в ихний комитет написать, вопрос задать?![]()
The future is already here - it is just unevenly distributed. (c) W. Gibson
да я тоже работал с интель компилятором,
и вопрос не лежит в плоскости фича - глюк.
это законная реализация компилятора. так компилятор писать можно и это в соответствии со стандартом. точка.
ну так прописали бы в стандарте
free(p)
p=NULL; //should be cleared before read
if(p)
{...}
и шабаш. помянули б сегментную модель памяти - и все понятно. нет, "изгаляюццо"...
Гугги, не валяйте дурака,
стандарт филологически и концептуально не может писатся так как вы предлагаете.
еще раз говорю прикол он и в африке прикол.![]()
Социальные закладки