|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Первый тест на знание C++ sql.ru (ожидаемо) провалил. Когда я подумал что дно уже достигнуто, снизу постучался некто MasterZiv, утверждая, что `int* const ptr = new int{};` это динамическое создание константного объекта ( 21998710 ). Ладно, вопрос попроще. Есть код Код: plaintext 1. 2. 3. 4. 5. 6.
Сказано, что при освобождении памяти значения всех указателей (которые попадают под определённое условие) становятся invalid pointer values. basic.stc/4When the end of the duration of a region of storage is reached, the values of all pointers representing the address of any part of that region of storage become invalid pointer values. Также про объекты с automatic storage duration известно что они сохраняют последнее записанное в них значение . intro.execution/6An instance of each object with automatic storage duration is associated with each entry into its block. Such an object exists and retains its last-stored value during the execution of the block and while the block is suspended ... Если значение стало другим (invalid pointer value), значит это изменение значения было записью (иначе бы сохранилось последнее записанное, которое, очевидно, не invalid pointer value). В каком порядке в указатели записывается invalid pointer value? Сначала в p1 или в p2? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 20:28 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axisЕсли значение стало другим (invalid pointer value), значит это изменение значения было записью (иначе бы сохранилось последнее записанное, которое, очевидно, не invalid pointer value).invalid pointer value - не означает что значение стало другим. Ладно, давай так попробуем: - У тебя есть книжный стеллаж с полками. Пустой. И тетрадка чистая. - Ты кладешь на самую нижнюю полку книжку а в тетрадку пишешь: "книжка на нижней полке". - Открываешь другую страницу в тетрадке и пишешь тоже самое "книжка на нижней полке". - Кладешь тетрадку на стол, подходишь к стеллажу и забираешь книжку. СТОП! Какой текст сейчас записан на страницах тетрадки? Стали ли записи в тетрадке правильными или стали неправильными? Ответь на эти два вопроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 20:53 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
У меня - тягостное дежа-вю. Мне кажется мы уже обсуждали этот вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 20:57 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
White OwlZ axisЕсли значение стало другим (invalid pointer value), значит это изменение значения было записью (иначе бы сохранилось последнее записанное, которое, очевидно, не invalid pointer value).invalid pointer value - не означает что значение стало другим.Почему? White OwlЛадно, давай так попробуем: - У тебя есть книжный стеллаж с полками. Пустой. И тетрадка чистая. - Ты кладешь на самую нижнюю полку книжку а в тетрадку пишешь: "книжка на нижней полке". - Открываешь другую страницу в тетрадке и пишешь тоже самое "книжка на нижней полке". - Кладешь тетрадку на стол, подходишь к стеллажу и забираешь книжку. СТОП! Какой текст сейчас записан на страницах тетрадки? Стали ли записи в тетрадке правильными или стали неправильными? Ответь на эти два вопроса.Можно я отвечу цитатой? Рибо «Эволюция общих идей»Рассуждение по аналогии представляет собою рассуждение уже гораздо более высокого порядка. Оно является главным логическим орудием ребёнка и первобытного человека. Я предпочитаю более убедительные методы рассуждений, чем аналогии. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:06 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axisМожно я отвечу цитатой?Нельзя. Подумай над моим вопросом и ответь сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:10 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
До и после delete значения указателя не меняются. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:12 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
maytonДо и после delete значения указателя не меняются.А о чём говорится в [basic.stc]/4 тогда? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:13 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axismaytonДо и после delete значения указателя не меняются.А о чём говорится в [basic.stc]/4 тогда?о том, что пользоваться p2 после удаления p1 ты можешь только на свой страх и риск, более того, язык гарантирует, что у тебя в программе будет ошибка, если ты им будешь пользоваться особенно умело) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:16 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axismaytonДо и после delete значения указателя не меняются.А о чём говорится в [basic.stc]/4 тогда? Подожди. Ты в топике - ученик. Падаван. И не влючай менторский тон. Ты пришел с незнанием. Ты пришел с вопросом. И будь добр. Держи лицо таким чтобы все видели что ты внимаешь и слушаешь опытных ОК? А теперь если ок тогда вопрос. Ты согласен что указатель - это целое число которое указывает на ячейку памяти? Я об этом писал в закрытом топике. И ты тогда ответил - нет. Очевидно у тебя были какие-то другие соображения. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:20 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
White OwlZ axisМожно я отвечу цитатой?Нельзя. Подумай над моим вопросом и ответь сам.Да я думаю можно. Ответ ванильной цитаткой это вполне на уровне рассуждений аналогиями. Ну да ладно. Текст записан тот же, но записи — неправильны. Я это должен был ответить? Только проблема в том, что эта аналогия не соответствует моему вопросу. В этом проблема рассуждений аналогиями. Трудно (если возможно) подобрать корректную. Я знаю вопрос соответствующий аналогии, но говорить (пока) не буду. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:23 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
maytonZ axisпропущено... А о чём говорится в [basic.stc]/4 тогда? Подожди. Ты в топике - ученик. Падаван. И не влючай менторский тон. Ты пришел с незнанием. Ты пришел с вопросом. И будь добр. Держи лицо таким чтобы все видели что ты внимаешь и слушаешь опытных ОК?А где менторский тон? Я и задал вопрос: о чём говорится в [basic.stc]/4. maytonА теперь если ок тогда вопрос. Ты согласен что указатель - это целое число которое указывает на ячейку памяти?Не знаю. Что стандарт говорит? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:25 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
ТС болен, а вы не врачи, забаньте его и всё, зачем издеваться, все равно этим закончится. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:36 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axisWhite Owlпропущено... Нельзя. Подумай над моим вопросом и ответь сам.Да я думаю можно. Ответ ванильной цитаткой это вполне на уровне рассуждений аналогиями. Ну да ладно. Текст записан тот же, но записи — неправильны. Я это должен был ответить?Да. Верно. Так вот в данной ситуации - указатели это странички в тетрадке. Текст на страничках не изменяется, но он становится неверным. Точно так же и с указателями - они сами не изменяются, но становятся неверными. Z axisВ этом проблема рассуждений аналогиями. Трудно (если возможно) подобрать корректную.Трудно, не означает невозможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:36 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axismaytonпропущено... Подожди. Ты в топике - ученик. Падаван. И не влючай менторский тон. Ты пришел с незнанием. Ты пришел с вопросом. И будь добр. Держи лицо таким чтобы все видели что ты внимаешь и слушаешь опытных ОК?А где менторский тон? Я и задал вопрос: о чём говорится в [basic.stc]/4. maytonА теперь если ок тогда вопрос. Ты согласен что указатель - это целое число которое указывает на ячейку памяти?Не знаю. Что стандарт говорит? Я не помню стандарт наизусть. Ты согласен что ты видел своими глазами что указатель хранит просто целое число? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:37 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
maytonЯ не помню стандарт наизусть.А зачем помнить? Можно взять последний перед стандартизацией драфт и посмотреть https://timsong-cpp.github.io/cppwp/n4659/ maytonТы согласен что ты видел своими глазами что указатель хранит просто целое число?Это ты про код свой? Не согласен. Код полон UB из-за некорректной форматной строки, а ещё там небольшая кучка implementation-defined behavior и вообще как кто-то сказал в прошлом треде: компилятор не обязательно на 100% соответствует стандарту. Если возможно, что код выполняется не так, как требует стандарт, то такой способ рассуждений так же неубедителен, как рассуждения аналогиями. Проще опираться чисто на стандарт. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:47 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axismaytonЯ не помню стандарт наизусть.А зачем помнить? Можно взять последний перед стандартизацией драфт и посмотреть https://timsong-cpp.github.io/cppwp/n4659/ А что перед тем как умножать числа я должен каждый раз перечитывать таблицу Пифагора? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:48 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axisПроще опираться чисто на стандарт. Для теоретиков - да. Те, кто пишут реальные программы для реальных компьютеров, учитывают их работу. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:52 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axisЭто ты про код свой? Не согласен. Код полон UB из-за некорректной форматной строки, а ещё там небольшая кучка implementation-defined behavior и вообще как кто-то сказал в прошлом треде: компилятор не обязательно на 100% соответствует стандарту. Если возможно, что код выполняется не так, как требует стандарт, то такой способ рассуждений так же неубедителен, как рассуждения аналогиями. Проще опираться чисто на стандарт. Отлично. Ты опирался на стандарт. Опирался 3 раза. Создал 3 топика. У тебя от чтения стандарта стало ясно в голове? Да в коде бывают UB. Я тебе показал частный случай чтобы ты понял что указатель это целое число которое указывает на ячейку памяти. И никакого признака invalid pointer value оно внутри себя не хранит потому что хренить этот признак негде. Это простая логика для которой не нужно читать стандарты. Хотя есть еще и значение NULL. Но в данном частном примере мы наблюдали забавное поведение когда компиллятор GCC в дефолтном режиме настроек ничего не обнулял и не инвалидировал. Блоки выделенной памяти кстати существуют отдельно от твоих указателей. Ими ведает операционная система. Вот и думай дальше как эти факты увязать в голове. Стандарты читай. Читай и проверяй. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 21:54 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axis, тебе уже объяснили, что invalid pointer value это не "значение", а "состояние". никто ничего не меняет в самих указателях, когда ты делаешь delete. изменяется состояние памяти, на которую они указывают: была чья-то, стала - свободна. Поскольку память освободили, то все указатели, которые смотрели в эту точку теперь смотрят на освобожденный кусок памяти, работать с которым им запрещают законы языка/ОС и здравого смысла. Возможно, я знаю откуда проистекает твое непонимание этого вопроса. По всей видимости, ты считаешь, что указатель - это такая сущность, которая всегда разделяет свое состояние с другими указателями, если они смотрят совместно в одну и ту же область памяти. Но это не так! Указатель - это, прежде всего, переменная! Иначе где и как бы он хранил свой адрес? Если ты создал экземпляр второго указателя p2, значит ты потратил память стека на хранение его значения, а не создал 2-ой указатель, который разделяет память первого! Если ты согласен с этим утверждением, то ты поймешь, что значение 2 или более переменных, пусть даже это одинаковые значения, не получится изменить сразу, как только мы поменяли значение первой из них. Если переформулировать твой пример, с учетом вышесказанного, то Код: plaintext 1. 2. 3.
когда x станет 0? никогда! потому что x - это копия n, а не n p2 является копией p1, также как и x является копией n, поэтому, когда менеджер памяти тебе возвращает указатель, он не может знать что ты с ним делаешь. Потому что у тебя своя копия, а у него - его личная. Чтобы изменились все указатели сразу, как только ты делаешь delete, нужно чтобы они разделяли свое состояние, а не были копиями. Единственное что разделяют эти указатели - это адрес памяти, куда они смотрят. Сдвинь p1 на 1 байт, p2 при этом никак не изменит своего значения! Он по-прежнему будет смотреть туда же, куда и смотрел до этого. Сдвиг изменяет значение того указателя, к которму он применен, а delete изменяет "значение" памяти, на которую указатели смотрят. Но поскольку "изменение памяти" при delete носит скорее логический смысл чем физический (ячейки же на плате не сгорают), то invalid pointer value, следует интерпретировать как состояние указателей, которые стали смотреть на освобожденную память, но их фактические адреса никак не пострадали от этого - они по преженему смотрят туда же, куда смотрели до вызова delete. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 22:03 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
maytonДа в коде бывают UB. Я тебе показал частный случай чтобы ты понял что указатель это целое число которое указывает на ячейку памяти. И никакого признака invalid pointer value оно внутри себя не хранит потому что хренить этот признак негде. Это простая логика для которой не нужно читать стандарты.Насколько мне известно, разным значениям не обязано соответствовать разное представление этих значений. (Т.е. 2 объекта, хранящие 2 различных значения не обязаны побитово различаться). maytonХотя есть еще и значение NULL. Но в данном частном примере мы наблюдали забавное поведение когда компиллятор GCC в дефолтном режиме настроек ничего не обнулял и не инвалидировал.Как ты сам сказал, признака invalid pointer value может и не храниться "внутри". Как ты тогда определил, инвалидировал он или не инвалидировал? maytonСтандарты читай. Читай и проверяй.Относительно чего проверять стандарт? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 22:06 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axisОтносительно чего проверять стандарт? Относительно реальности, данной нам в ощущениях. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 22:09 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Cerebrumтебе уже объяснили, что invalid pointer value это не "значение", а "состояние".Правда, не сказали, откуда это взято. Где в стандарте это написано. А я, в отличие от, указал, где сказано, что это "значение". В [basic.compound]/3. Прилагаю релевантный скрин ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 22:10 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axisinvalid pointer value может и не храниться "внутри". Как ты тогда определил, инвалидировал он или не инвалидировал? Я распечатал длину указателя 8 байтов. И его содержимое. Целое. Гребаное целое число из 8 байтов. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 22:17 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
Z axisне сказали, откуда это взято. Где в стандарте это написано. Там, где даётся определение понятию "invalid pointe value". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 22:24 |
|
В какой указатель запись будет произведена первой?
|
|||
---|---|---|---|
#18+
maytonZ axisinvalid pointer value может и не храниться "внутри". Как ты тогда определил, инвалидировал он или не инвалидировал? Я распечатал длину указателя 8 байтов. И его содержимое. Целое. Гребаное целое число из 8 байтов.Это не значит что значение указателя это число. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 22:24 |
|
|
start [/forum/topic.php?fid=57&fpage=11&tid=2017537]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
103ms |
get tp. blocked users: |
2ms |
others: | 298ms |
total: | 472ms |
0 / 0 |