Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/56: Рейтинг темы: голосов - 56, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 20

Почему при выходе за пределы массива мы получаем «мусор», а не нули?

22.11.2022, 09:57. Показов 11187. Ответов 49
Метки нет (Все метки)

Почему при выходе за пределы массива мы получаем «мусор», а не нули?
Прошу объяснить подробно, почему, как и с чем это связано. Домашнюю работу задали на курсах)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2022, 09:57
Ответы с готовыми решениями:

Почему работает программа при выходе за пределы массива?
Добрый день, возникла проблема. Я задал одномерный массив из 10 элементов, однако, когда в я цикле пытаюсь присвоить значения большему...

Ошибка сегментации при выходе за пределы динамического массива
Всем привет. Вопрос: что нужно сделать (если это возможно), чтобы ВСЕГДА при выходе за пределы динамического массива была ошибка...

Почему при сложении элементов массива выводит мусор?
#include<stdio.h> #include <malloc.h> #include <math.h> int main(){ int n; int sum = 0; printf("Enter n = "); scanf("%d",...

49
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
23.11.2022, 16:03
Цитата Сообщение от IGPIGP Посмотреть сообщение
Однако, я стараюсь не экономить на словах, а вы что-то намёками всё. Что именно вы имеете ввиду под техникой? Микросхемы?
Да, я имел ввиду их родимых. Для обнуления требуются доп. транзисторы в любом случае, если этого не сделать -то состояние ячейки памяти будет случайным. но дальше в физику смысла вдаваться нет, думаю.
Это чисто про аппаратный уровень если говорить.

Хотя проблема в самом деле имеет очень много аспектов. Про программные здесь отлично написано, особенно в посте TheCalligrapher. Про многие моменты из написанного им я бы и не сообразил. Я как-то по микросхемкам больше

А с точки зрения чисто С++ это всё и вовсе UB, тоже совершенно правильно подмечено. Хотя это UB (которое все же больше теоретическое в том смысле, что существует только на уровне C++) в реальности не мешает нам в наблюдать вполне конкретный "мусор", причем в каких-то конкретных условиях конкретных сборок отдельные конкретные значения того или иного "мусора" вполне можно даже объяснить и они даже будут повторяемы от раза к разу. Т.е. как бы уже и не "случайный мусор".

Цитата Сообщение от SmallEvil Посмотреть сообщение
Хотя, думаю, KSergey9, без картинок не разберется.
Куда уж ему. Согласен, не разберётся.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
23.11.2022, 18:28
Цитата Сообщение от KSergey9 Посмотреть сообщение
все же больше теоретическое в том смысле, что существует только на уровне C++
UB, про которое говорится в этом разделе, всегда и только существует на уровне С++ и абстрактной машины, которую описывает его ISO стандарт. Опасность UB вовсе не в том, что на какой-то конкретной машине вы не сможете что-то предсказать и объяснить, опасность UB в том, что ваша программа при его наличии теряет все гарантии, которые дает стандарт.
Много раз я уже здесь это говорил, но люди все равно продолжают уравнивать UB с падением программы или какими-то другими конкретными спецэффектами. Еще раз: UB - это не спецэффекты.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
24.11.2022, 10:48
Цитата Сообщение от DrOffset Посмотреть сообщение
опасность UB в том, что ваша программа при его наличии теряет все гарантии, которые дает стандарт.
Так и есть, согласен совершенно.

Проблема лишь в дизайне языка.
Вообще это огромный парадокс: почему язык с постоянно растущим списком UB остаётся очень популярным.
Я примерно даже знаю ответ.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
24.11.2022, 11:46
Цитата Сообщение от KSergey9 Посмотреть сообщение
с постоянно растущим списком UB
В целом этот список наоборот сократился, по сравнению, например с С++98.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
24.11.2022, 12:53
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
выделением страницы из заранее заготовленного пула обнуленных страниц, поддерживаемого ОС.
Интересное утверждение, тогда как речь идет о конкретном языке программирования, который насколько я знаю этого не гарантирует. При этом не уточняется ОС, а в то что все разработчики ОС договорились и как то гарантируют такое поведение не очень то и верится. Можете пожалуйста поделиться, на чем основано такое общее утверждение?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2022, 12:55
Цитата Сообщение от Undisputed Посмотреть сообщение
мы еще не успели положить в память "свой" мусор
это - не верное утверждение.
у тебя ещё до вызова функции main исполняется много различной работы.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
24.11.2022, 12:58
hoggy,
Я удалил вторую часть сообщения, позже понял что просто невнимательно прочитал текст. Но первый вопрос открыт... просто после его поста сложилось впечатление из разряда "не переживай, на обнуление ресурсы не уйдут". Особенно интересует как это можно проверить
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2022, 12:59
Цитата Сообщение от Undisputed Посмотреть сообщение
просто после его поста сложилось впечатление из разряда "не переживай, на обнуление ресурсы не уйдут"
дык,
тебе действительно не нужно переживать по этому поводу.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
24.11.2022, 13:01
Цитата Сообщение от hoggy Посмотреть сообщение
тебе действительно не нужно переживать по этому поводу.
а как я могу проверить, что есть пул обнуленных страниц и что память мне отдали именно оттуда?

Добавлено через 1 минуту
и что будет, если в момент запроса новой обнуленной памяти этот пул не будет иметь свободных страниц? ждать когда ОС сделает reallocate и обнулит новые страницы? ты уверен что это выгодное решение?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.11.2022, 13:18
Цитата Сообщение от Undisputed Посмотреть сообщение
а как я могу проверить, что есть пул обнуленных страниц и что память мне отдали именно оттуда?
не надо тебе ничего проверять.

а вот когда тебе это действительно будет нужно,
ты уже будешь знать, где посмотреть
2
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
24.11.2022, 14:00
Цитата Сообщение от hoggy Посмотреть сообщение
а вот когда тебе это действительно будет нужно
Если исходить из практики, то скорее всего мне это никогда непонадобится т.к обычно оптимизировать нужно не такие вещи, а например IO, думать что-то где закешировать и т.д. Поэтому не думаю что мне это действительно будет нужно Просто интересно для общего развития

Добавлено через 37 минут
C++
1
2
3
4
5
6
7
8
9
    // допустим, нам выделили страницу (не обнуленная, т.к обнуление не просили)
    int* a = new int[5];
    
    // вместо того что бы использовать страницу которую получили выше,
    // будет выделена новая обнуленная страница?
    int* b = new int[5]{};
    
    // или всегда все страницы обнуленные, и при полном их исчерпании,
    // они снова обнуляются по мере возвращения в пул?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
24.11.2022, 14:12
Цитата Сообщение от Undisputed Посмотреть сообщение
C++
1
2
3
// вместо того что бы использовать страницу которую получили выше,
 // будет выделена новая обнуленная страница?
 int* b = new int[5]{};
ОС выдает большие куски менеджеру памяти, вшитому в приложение, при надобности уже этот менеджер нарезает мелкими кусочками. Он же переиспользует память , если была ранее освобождена в рамках приложения.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
24.11.2022, 14:24
Цитата Сообщение от KSergey9 Посмотреть сообщение
ОС выдает большие куски менеджеру памяти, вшитому в приложение, при надобности уже этот менеджер нарезает мелкими кусочками. Он же переиспользует память , если была ранее освобождена в рамках приложения.
Это не ответ на мой вопрос...
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
24.11.2022, 14:25
Цитата Сообщение от Undisputed Посмотреть сообщение
Это не ответ на мой вопрос...
Это ответ на предложение с вопросительным знаком в конце.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
24.11.2022, 14:30
Цитата Сообщение от KSergey9 Посмотреть сообщение
Это ответ на предложение с вопросительным знаком в конце.
То что некий аллокатор будет менеджить выделенную память вопросов не вызывает.. нельзя же в отрыве от контекста отвечать на вопросы... предлагаю лучше дождаться TheCalligrapher что бы не флудить лишний раз
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
24.11.2022, 14:41
Цитата Сообщение от Undisputed Посмотреть сообщение
нельзя же в отрыве от контекста отвечать на вопросы.
от какого контекта? приведен конкретный код, по нему заданы вопросы.
На эти вопросы отвечено.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
24.11.2022, 14:47
Цитата Сообщение от KSergey9 Посмотреть сообщение
от какого контекта? приведен конкретный код, по нему заданы вопросы.
На эти вопросы отвечено.
Где вы увидели ответ? Где в вашем ответе информация о zeroed pages?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
24.11.2022, 14:56
Цитата Сообщение от Undisputed Посмотреть сообщение
о zeroed pages?
Вот же:
Цитата Сообщение от KSergey9 Посмотреть сообщение
ОС выдает большие куски менеджеру памяти, вшитому в приложение
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
24.11.2022, 15:02
KSergey9,
Там ни слова о zeroed pages. Естественно то что выделяется - отдается в распоряжение аллокатору. Это не мой вопрос. Вопрос был в том, если есть у аллокатора запас не zeroed байт, пойдет ли он всё равно за новой, но уже zeroed страницей, если запрос на выделение памяти содержит просьбу обнулить содержимое памяти?
0
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
24.11.2022, 15:38
А вариант ответа в духе "потому, что стандартом С++ не предусмотрена обязательная инициализация памяти нулями при выполнении программы" не предложен? Все остальное - философская лирика.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2022, 15:38

"Неопределенное поведение" при выходе вводимых данных за пределы массива
В условии задачи написано, что функция не проверяет индексы. И если введенные пользователем входные данные будут выходить за пределы...

При выходе из конструктора переменная уже указывает на мусор
Я не уверен, что я сделал не так, но при выходе из конструктора указатель созданный с помощью new, указывавший прежде на мой массив теперь...

Ошибка о выходе за пределы массива
При изменении условия s>1 на s>0 ошибка о выходе за пределы массива. как исправить? #include <iostream> #include <vector>...

Почему при передачи массива через ajax на выходе выходит строка?
Почему при передачи массива через ajax на выходе выходит строка? Говоря о выходе, я имею ввиду что данные, элементы массива, передаются в...

Прокрутка в canvas при выходе содержимого за пределы
Доброго временни суток. Возникло несколько проблем: Есть Canvas на форме. Предполагается динамически добавлять на него другие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru