0 / 0 / 0
Регистрация: 06.05.2021
Сообщений: 34
|
||||||
1 | ||||||
Почему в одном случае мусор выводится а в другом нет17.09.2021, 05:00. Показов 1438. Ответов 10
Метки нет Все метки)
(
A[0][0]=0 B[0][0]=-858993460 a=0 Я понял что в случае с глобальной переменной и матрицей они по умолчанию инициализированы нулями поэтому можно выводить их значения, которые храняться в участке их памяти. Мне понятно почему мы не можем вывести значение из локальной переменной, которая не была иницилизирована и в её участке памяти хранится мусор и это практически тоже самое что обратится к не инициализированному участку памяти. Но почему при этом без вопросов компиялтор выводит значение мусора из не инициализированной локальной матрицы? Мне не понятно.
0
|
17.09.2021, 05:00 | |
Ответы с готовыми решениями:
10
Delphi 7. Почему на одном компе содержимое Image1.Canvas выводится на принтер, а на другом нет? Почему в одном случае y=0, в другом - y=1 ? Toast в одном случае работает в другом нет |
Злостный нарушитель
![]() 9771 / 5316 / 1210
Регистрация: 12.03.2015
Сообщений: 24,985
|
|
17.09.2021, 08:32 | 2 |
Компилятор ничо не выводит. Выводом занимается функция форматированного вывода printf(), которая тупо берёт значение по заданному ТОБОЙ адресу и тупо выводит его на консоль. Чо не так-то?
Как это не можем? Могём! Именно это у тебя и происходит. Добавлено через 1 минуту Скажи мне, зачем ты пишешь "...ться" там, где не надо? Ведь делать так можно только специально. Это такой новый вид олбанского диалекта?
0
|
0 / 0 / 0
Регистрация: 06.05.2021
Сообщений: 34
|
|
17.09.2021, 08:56 [ТС] | 3 |
Я снял комментарий с 12 строчки кода, где находится локальная переменная b, которая не была инициализирована. И компилятор выдаёт ошибку uninitialized local variable 'b' used В первом примере у меня с переменной b ничего не происходит так как строчка закоментирована. Как я понимаю это защита от обращения в участок памяти, который не был инициализирован. Поэтому вывести мусор из не инициализированной переменной b не получилось. А вот вывести значение мусора что хранится не инициализированной лок матрице B получается, что видно в первом примере. В этом и состоял вопрос.
0
|
Злостный нарушитель
![]() 9771 / 5316 / 1210
Регистрация: 12.03.2015
Сообщений: 24,985
|
|
17.09.2021, 09:02 | 4 |
Всё зависит от настроек конкретного компилятора. Вот пример для GCC:
Скажи мне, зачем ты пишешь "...ться" там, где не надо? Ведь делать так можно только специально. Это такой новый вид олбанского диалекта?
1
|
0 / 0 / 0
Регистрация: 06.05.2021
Сообщений: 34
|
|
17.09.2021, 09:06 [ТС] | 5 |
Теперь понятно видимо в настройках Virtual Studio есть защита от обращения к не инициализированным переменным. Чтобы потом не мучится и не искать ошибки в коде. Странно почему для лок матрицы, такую защиту пропустили.
0
|
фрилансер
![]() 6326 / 5454 / 1108
Регистрация: 11.10.2019
Сообщений: 14,508
|
|
17.09.2021, 09:12 | 6 |
Constantin777, чтение из неинициализированной переменной - это неопределённое поведение. Нужно избегать этого всеми силами
![]()
0
|
0 / 0 / 0
Регистрация: 06.05.2021
Сообщений: 34
|
|
17.09.2021, 09:21 [ТС] | 8 |
Я с вами согласен. Вопрос был про то ,почему нет такой же защиты для лок матрицы B. Но выше объяснили что в другом компиляторе вообще всё происходит без ошибок, даже для лок переменной b. Видимо всё зависит от настроек компилятора. А я думал что есть какой то скрытый смысл или это где то применяется =Р
0
|
фрилансер
![]() 6326 / 5454 / 1108
Регистрация: 11.10.2019
Сообщений: 14,508
|
|
17.09.2021, 09:41 | 9 |
Constantin777, от отсутствия инициализации нет никакой защиты - программист должен сам за этим следить.
Однако об этом может предупредить компилятор или статический анализатор. глобальные и статические переменные/поля инициализируются нулями принудительно, даже если этого не указать явно. Для локальных - нужно указывать инициализацию явно
1
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
17.09.2021, 10:00 | 10 |
![]() Решение
1) Потому что спецификация языка не требует диагностики таких случаев. У вас срабатывает опциональная диагностика, она может быть, может не быть, может быть частично.
2) По историческим причинам массивы чаще используются в качестве хранилища неинициализированной памяти (например, предназначенной для отложенной инициализации), поэтому ваш компилятор не подход к этому настолько строго.
1
|
638 / 393 / 75
Регистрация: 21.09.2008
Сообщений: 1,355
|
|
18.09.2021, 19:56 | 11 |
Это поведение определённого компилятора, но не поведение, определённое Стандартом языка Си.
А Вы продизассемблируйте "выхлоп" компилятора Си и посмотрите, где и как он расположил локальные переменные в функции. Они располагаются на стеке, который очень активно используется и изменяется. Для углублённого изучения смотрите подраздел 2.6 здесь.
0
|
18.09.2021, 19:56 | |
Помогаю со студенческими работами здесь
11
Почему в одном случае возвращается массив, в другом объект? Почему на одном компьютере работает , а на другом - нет?
Почему программа работает на одном компьютере и нет - на другом? Datagridview! Почему в одном варианте работает, а в другом нет?! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Новые блоги и статьи
![]() |
||||
Winforstrap или красявый дизайн своими руками на HTML+JS+Winforms
anomal6 04.03.2025
Сидел тут вечером ковырял проект на MAUI, и как же глупо создаются пакеты MSIX и система обновлений пакета публикации, но не об этом.
Бывает нужен современный дизайн программы а писать на MAUI,. . .
|
Формат данных для симуляции физики, посредством распространённых не обученных моделей.
Hrethgir 04.03.2025
Что-то как-то снова потерялось, зато катангенсы закатангесились в одном сообщении. На днях писал, что планирую для работы апгрейдить (на этот раз удачно) девайс для работы (конкретно - здоровья для,. . .
|
Концепция variadic
CoderHuligan 04.03.2025
Мне не очень нравится (а кому это нравится?) что у нас есть отдельно компилятор, отдельно линковщик, причем со своим собственным командным языком. При этом усложнении надо знать помимо языка. . .
|
Java Record или Kotlin Data Class: что лучше для неизменяемых данных
Wired 04.03.2025
Java Record и Kotlin Data Class — два мощных инструмента для обуздания неизменяемых структур данных, каждый со своим уникальным подходом к решению этой задачи. История их появления весьма. . .
|
Создание производительных API с Java и gRPC
Wired 04.03.2025
В мире микросервисной разработки вопрос производительности часто становится краеугольным камнем. И хотя REST API давно завоевал сердца разработчиков своей простотой и интуитивностью, при высоких. . .
|
Что нового в JDK 24
Wired 04.03.2025
JDK 24 — это настоящий прорыв в эволюции Java, который кардинально меняет правила игры. В этом релизе разработчики Oracle наконец-то довели до ума множество критически важных улучшений в. . .
|
Разработка блокчейн с использованием Java: смарт-контракты и dApp
Wired 04.03.2025
Погружаясь в мир блокчейн-разработки на Java, разработчик получает доступ к внушительному арсеналу инструментов. В отличие от Solidity, который "заперт" в экосистеме Ethereum, Java предоставляет. . .
|
WebAssembly в Kubernetes
stackOverflow 03.03.2025
В современной экосистеме облачных технологий WebAssembly (Wasm) становится все более значимым компонентом, предлагая уникальный подход к выполнению кода в распределенных системах. Эта технология. . .
|
GitHub Actions или Jenkins: Выбираем CI/CD платформу
stackOverflow 03.03.2025
Непрерывная интеграция и развертывание (CI/ CD) изменили подход к разработке программного обеспечения, превратив его в бесшовный процесс от написания кода до развертывания в продакшн. GitHub Actions и. . .
|
Автоматизация тестирования Pull Request в Kubernetes: Интеграция с GitHub Actions и GKE
stackOverflow 03.03.2025
Масштабные проекты с использованием Kubernetes требуют надежной системы тестирования изменений перед их внедрением в продакшн-среду. Традиционный подход с ручной проверкой Pull Request не справляется. . .
|