|
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 20
|
|
Почему при выходе за пределы массива мы получаем «мусор», а не нули?22.11.2022, 09:57. Показов 10890. Ответов 49
Метки нет (Все метки)
Почему при выходе за пределы массива мы получаем «мусор», а не нули?
Прошу объяснить подробно, почему, как и с чем это связано. Домашнюю работу задали на курсах)
0
|
|
| 22.11.2022, 09:57 | |
|
Ответы с готовыми решениями:
49
Почему работает программа при выходе за пределы массива? Ошибка сегментации при выходе за пределы динамического массива
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||
| 24.11.2022, 15:46 | |||
|
Такого не бывает. Инициализация, которая есть в этом примере,
1
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 24.11.2022, 16:02 | |||
С другой стороны это сообщение выглядит так, что нужно просить обнуление определенной страницы, но в программе же мы не выделяем страницы, это подкапотные детали, куда мы не достаем... поэтому этот вариант я исключил, остался только {}
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 24.11.2022, 16:27 | ||
|
Ну ты чего? Это же вообще несвязанные вещи, находящиеся на разных уровнях абстракции. Как вообще может в голову прийти смешать инициализацию уровня языка и постраничное выделение памяти в ОС?? В любом случае инициализация технически выполняется после выделения памяти, тем самым образуя в ней валидные объекты. На уровень выделения памяти в менеджере памяти никакие детали создания объектов не просачиваются, не говоря уж про уровень ОС.
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 24.11.2022, 16:35 | ||||
|
0
|
||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||
| 24.11.2022, 19:56 | |||
|
Кроме того совсем не обязательно, что под словом "мы" понимались обычные программисты. Так что я бы трактовал это как: "человек, который пишет аллокатор на основе системных функций, может с помощью этих системных функций запросить обнуленные страницы".
1
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 24.11.2022, 21:51 | |
|
DrOffset,
Если так то теперь все понятно, спасибо. О таком варианте я даже не подумал потому что это был ответ на вопрос ТС, который учитывая какие вопросы он задает, скорее всего имел ввиду языковую плоскость, поэтому я даже не подумал выходить за рамки этой плоскости
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 24.11.2022, 22:22 | |
|
1
|
|
|
Комп_Оратор)
|
|
| 26.11.2022, 09:24 | |
|
Alexey123446, UB и мусор за пределами массива это ортогональные вещи. Они существуют независимо. А необнулённость памяти не зависит от того кто использовал её. Если это была ваша же программа, но вы пытаетесь читать данные другого формата, то оно тоже будет мусором. Это тоже не зависит от тех кто в детстве не выиграл школьный конкурс "Самый умный".
0
|
|
|
Вездепух
12923 / 6792 / 1818
Регистрация: 18.10.2014
Сообщений: 17,187
|
||
| 26.11.2022, 14:24 | ||
|
Я фокусировался лишь на следующих моментах: 1. Обнуление выделенной памяти не обязано происходить на уровне user space, т.е. делаться через некий memset кодом программы или стандартной библиотеки, а в подходящих случаях может выполняться функциональностью ядра ОС. Это может быть как выделение памяти из пула заранее обнуленных страниц, так и средства обнуления "на лету" менеджера виртуальной памяти. Это, разумеется, относится не к какому-то несчастному int a[10] = { 0 } или int *p = new int[10]{} в середине выполнения программы, а к большим блокам памяти, для которых можно ожидать перенаправления запроса на память на уровень ОС, или о неких начальных распределениях, для которых компилятор может гарантировать то, что они распределяются в "свежем" блоке памяти и т.д. и т.п. Это относится к ситуациям, когда обнуление не гарантируется языком, но может по возможности предоставляться (или даже гарантироваться) ОС, и к функциональности calloc (или даже некоего "большого" new int[]{}), где обнуление гарантируется языком.А будет ли выделенная такими способами память действительно обнуленной в тех случаях, когда язык этого не гарантирует - может зависеть и от ситуации, и от настроек ОС, и еще много от чего. В частности, насколько я помню, современные ОС не позволят вам увидеть в выделенных страницах "мусор" от других приложений. То есть весь "мусор" который вы там видите - всегда ваш. Опять же, учитывая, что такие вещи могут очевидным образом выливаться в противоречие между безопасностью и производительностью, они могут регулироваться внутренними настройками ОС. Например, выделяя память через malloc на старте программы на http://coliru.stacked-crooked.com или на локальных линуксах или виндах, я вижу девственно обнуленные страницы (кроме случаев отладочного CDCDCDCD, разумеется).2. Современные ОС - это не DOS, к которому кто-то прикрутил доморощенный хак для запуска параллельных приложений. Поэтому когда кто-то начинает разглагольствовать о том, что мы, оказывается, работаем с "ОЗУ", в котором, ясное дело, болтаются данные от соседних приложений - это вызывает, мягко говоря, легкое недоумение.
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 26.11.2022, 15:01 | |||
|
Благодарю за разъяснение.
0
|
|||
| 26.11.2022, 15:01 | |
|
Помогаю со студенческими работами здесь
50
"Неопределенное поведение" при выходе вводимых данных за пределы массива
Ошибка о выходе за пределы массива Почему при передачи массива через ajax на выходе выходит строка? Прокрутка в canvas при выходе содержимого за пределы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|