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

Неинициализированные указатели

14.04.2026, 17:27. Показов 8111. Ответов 127
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, если использование неинициализированных указателей в С++ сопряжено с рисками неопределённого поведения и случайного доступа к памяти, то для каких целей в языке оставлена возможность объявления неинициализированных указателей?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2026, 17:27
Ответы с готовыми решениями:

Неинициализированные локальные переменные
Меня интересует как обходить данные ошибки. В чем соль ошибок? Проблема даже не в том что они...

Неинициализированные переменные
пишет типа не инициализированы d1 и d2,хотя они объявлены#include "iostream" using namespace std;...

Неинициализированные локальные переменные warning C4700
// Laboratornaa.cpp: определяет точку входа для консольного приложения. // #include"stdafx.h"...

127
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
15.04.2026, 05:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Igor3D Посмотреть сообщение
Apple clang 14.0
Так Clang 14 и на Godbold генерирует полную main. С 2022 года кодогенераторы существенно ушли вперед.

Цитата Сообщение от Igor3D Посмотреть сообщение
У меня никаких чудес нету, "а" заполнено мусором (большое число)
Есть, разумеется.

На Apple Clang 14 удаляет цикл из кода по причине UB точно так же, как и везде. На Godbolt это сразу очевидно, потому что неинициализированная переменная выводится как 0. А у вас ("большое число") нужно лишь слегка модифицировать код, чтобы увидеть "чудеса".

В любом случае, вы нам собираетесь рассказывать, что у вас не проявляется очевидный UB? К чему это тут? Какие выводы нам предлагается из этого сделать?
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 07:45  [ТС]
TheCalligrapher, Отвечая вам и Наталья8, этой незамысловатой программой я опроверг мнение Алексей 1153 - "Как раз неинициализированному указателю совсем-совсем ничего не присваивается ..." озвученное ранее, а так же предметно подтвердил позицию заявленную Страуструпом из цитаты его книги "Эта инструкция записывает число 7.0 в некую ячейку памяти. Мы не знаем, в какой части памяти расположена эта ячейка. Это может быть безопасно, но рассчитывать на это нельзя. Рано или поздно мы получим тот же результат, что и при выходе за пределы допустимого диапазона: программа аварийно завершит работу или выдаст неправильные результаты." и цитаты от ИИ "Если попытаться вывести значение неинициализированного указателя, например, с помощью std::cout, то на экран будет выведено адрес в памяти, который хранится в указателе. Это может быть любой адрес, включая тот, который не ссылается на допустимый объект." представленными мною ранее. В каком месте Страуструп врёт, а ИИ ошибается так и осталось для меня загадкой, так же как и смысл приведения примеров неинициализированных переменных применительно к вопросу о неинциализированном указателе.
0
фрилансер
 Аватар для Алексей1153
6494 / 5722 / 1133
Регистрация: 11.10.2019
Сообщений: 15,282
15.04.2026, 08:00
Also what, моя последняя попытка:

неинициализированной фундаментальной переменной ничего не присваивается. Это не мнение, это так работает.

Выделяется место на стеке (либо выделяется регистр под переменную). В это место ничего не пишется, какие битики там были, так и остаётся.

Это и есть тот мусор, который там уже был ранее, то есть, его мы не сейчас туда записали, он там просто валялся.

Можешь представить белую доску, на которой маркером написаны разные числа.
Обведи на доске прямоугольником некую область - это ты выделил место по переменную на стеке.
Некие числа попали в этот прямоугольник.
Ты же их туда не записывал, они там были ранее, возможно год назад они там были написаны.

Эти числа не имеют смысла. И никто не пойдёт вводить их в качестве пароля или искать дом по этому адресу
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 08:22  [ТС]
Алексей1153, Ну почему же не имеют смысла. Всему при желании можно найти применение. По факту число есть? Есть. Указателю адрес на это число присвоен? Присвоен. Утверждение "неинициализированному указателю совсем-совсем ничего не присваивается" ложно? Ложно. Кто и когда туда записал это число вообще вопрос десятый, главное что неинциализированный указатель на него ссылается и мы при желании можем его считать и даже изменить если захотим. А насчет использования/бесполезности - почему бы не использовать это рандомое число вместо функции предоставляющей рандомное число например.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
15.04.2026, 08:27
Цитата Сообщение от Also what Посмотреть сообщение
В каком месте Страуструп врёт, а ИИ ошибается так и осталось для меня загадкой
Вам уже несколько раз указали, что правильный ответ здесь только один: неопределенное поведение. А разглагольствования про "запишется в некую ячейку" или "будет выведен любой адрес" - это сказочки для блондинок-первокурсниц.

Спецификация (стандарт) языка С++ ясно говорит в [basic.indet], что неинициализированная автоматическая переменная содержит indeterminate value (C++23, [basic.indet], пункт 1). Любое вычисление, порождающее indeterminate value в качестве результата, вызывает неопределенное поведение (за рядом исключений, сделанных для значений типов unsigned char и std::byte) (C++23, [basic.indet], пункт 2).

Всё. Это - единственно правильный ответ. Никакого другого ответа тут быть не может.

И ваш ИИ с радостью вам об этом расскажет, если вы на этом настоите. И даже честно признает, что изначально нес чепуху.

Цитата Сообщение от Also what Посмотреть сообщение
так же как и смысл приведения примеров неинициализированных переменных применительно к вопросу о неинциализированном указателе
???

Неинициализированная переменная типа "указатель" - это просто неинициализированная переменная, ничем не отличающаяся от любой другой неинициализированной переменной. Указатели не имеют никакого особого статуса в С++. Я думал, что такие элементарные вещи не надо разжевывать.

Тут вам нужно самостоятельно достраивать элементарные недостающие связи, потому что остальным участника форума они могут казаться само собой разумеющимися: если я в разговоре об указателях привел пример без указателей, значит вы тут же делаете и берете на карандашик вывод о том, что разницы нет.
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 08:32  [ТС]
TheCalligrapher, Простите, а зачем вы мне раз за разом указываете спецификацию неинициализированной переменной, если мой вопрос о неинциализированном указателе? Меня не интересуют неинициализированные переменные от слова совсем.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
15.04.2026, 08:42
Цитата Сообщение от Also what Посмотреть сообщение
а зачем вы мне раз за разом указываете спецификацию неинициализированной переменной, если мой вопрос о неинциализированном указателе?
Ым... Вот это поворот... Но в языке С++ понятие инициализации/инициализированности применимо только к объектам, то есть к переменным.

А вы оказывается что-то новое придумали, но нам до сих пор не сказали. Так расскажите же нам тогда, о чем вы вообще ведете речь. Я весь в нетерпении.
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 08:45  [ТС]
О неинциализированных указателях и только. Указатель ссылается на переменные, но не является ими. Разве в спецификации это не написано?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
15.04.2026, 08:48
Цитата Сообщение от Also what Посмотреть сообщение
О неинциализированных указателях и только. Указатель ссылается на переменные, но не является ими.
Чего? Это какое-то очередное ваше изобретение. Причем если предыдущие ваши разглагольствования можно было отнести к типичным и весьма распространенным заблуждениям начинающих (дальше книги Страуструпа много кто не продвигается), то вот это выше - это уже какая-то феерическая отсебятина.

Вынужден вас разочаровать: в языке С++ все объекты в хранилище, без исключения - переменные. Указатели тоже.

Ваши слова отдаленно похожи на несколько перевранные характеристики ссылок (а не указателей). Ссылки в С++ не являются объектами, но, что интересно, являются переменными тоже. Понятие переменной в С++ определяется как совокупность объектов и ссылок:

6 Basics
6 A variable is introduced by the declaration of a reference other than a non-static data member or of an object. The variable’s name, if any, denotes the reference or object.
В книге того же Страуструпа вы можете прочитать, что ссылки в С++ можно рассматривать как альтернативные имена уже существующих объектов. Именно эта идея спрятана в вышеприведенной цитате из стандарта, т.е. именно по этой причине объекты и ссылки свалены в общий класс - переменные.
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 08:59  [ТС]
TheCalligrapher, TheCalligrapher,"В языке С++ понятие инициализации/инициализированности применимо только к объектам, то есть к переменным", "в языке С++ все объекты в хранилище, без исключения - переменные. Указатели тоже." - то есть указатели тоже объекты/переменные. Тогда почему к ним не применимо понятие инициализации/инициализированности? Противоречите сами себе батенька.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
15.04.2026, 09:01
Цитата Сообщение от Also what Посмотреть сообщение
то есть указатели тоже объекты/переменные
Верно.

Цитата Сообщение от Also what Посмотреть сообщение
Тогда почему к ним не применимо понятие инициализации/инициализированности? Противоречите сами себе батенька.
Чего? "к ним не применимо понятие инициализации/инициализированности"??? Где это вы такое у меня увидели???

Мои слова:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
в языке С++ понятие инициализации/инициализированности применимо только к объектам, то есть к переменным.
Где вы здесь увидели "не"?
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 09:12  [ТС]
TheCalligrapher, Да ладно дурака-то включать. Ваша цитата "В языке С++ понятие инициализации/инициализированности применимо только к объектам, то есть к переменным." была приведена как ответ на мою "а зачем вы мне раз за разом указываете спецификацию неинициализированной переменной, если мой вопрос о неинциализированном указателе?" где я недвусмысленно веду речь об указателях. "В языке С++ понятие инициализации/инициализированности применимо только к объектам, то есть к переменным" что применительно к обсуждаемым указателям явном образом подразумевает за собой, что к указателям понятие инициализации/инициализированности по вашему мнению не применимо. Налицо переобувание на ходу, вы так не считаете?
0
фрилансер
 Аватар для Алексей1153
6494 / 5722 / 1133
Регистрация: 11.10.2019
Сообщений: 15,282
15.04.2026, 09:18
Also what, предлагаю найти пять отличий в функциях f1 и f2 (ну, кроме имён)

https://godbolt.org/z/xKf7dvTr3



Если удалось найти отличия, поздравляю, программирование - это не твоё
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
15.04.2026, 09:18
Цитата Сообщение от Also what Посмотреть сообщение
"В языке С++ понятие инициализации/инициализированности применимо только к объектам, то есть к переменным" что применительно к обсуждаемым указателям явном образом подразумевает за собой, что к указателям понятие инициализации/инициализированности по вашему мнению не применимо
Что вы плетете? Еще раз даю под запись, для обязательного вызубривания наизусть: переменная типа "указатель" является такой же переменной, как и переменная любого другого типа.

P.S. Кстати, я это уже говорил выше. У мне складывается такое впечатление, что вы не конспектируете мои посты, не прорабатываете их длинными зимними вечерами при свете настольной лампы и не перечитываете их необходимое для закрепления количество раз. Заверяю вас, так никакого толку не будет.
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 09:25  [ТС]
TheCalligrapher Ответил уклончиво. Алексей1153 Рискну предположить, что у представленных вами функций кроме имён отличаются ещё и фамилии. Я буду программистом?
0
фрилансер
 Аватар для Алексей1153
6494 / 5722 / 1133
Регистрация: 11.10.2019
Сообщений: 15,282
15.04.2026, 09:27
Also what, так, а ещё три отличия ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
15.04.2026, 09:31

Не по теме:

У меня создается устойчивое впечатление, что мы уже наблюдаем вторую фазу того, о чем я говорил в посте #34. Когда нашему "старому знакомому" под очередным аккаунтом надоедает морочить нам голову, т.е. делать вид, что у него был какой-то вопрос, то начинается вторая фаза марлезонского балета: просто болтовня "ни о чем" без смысла и содержания.



Я думаю, что здесь уже ничего толкового не будет.
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 09:33  [ТС]
Тебе надо ты и ищи.

Добавлено через 2 минуты
Вы думаете? Мне показалось, что вы точно знаете.
0
фрилансер
 Аватар для Алексей1153
6494 / 5722 / 1133
Регистрация: 11.10.2019
Сообщений: 15,282
15.04.2026, 09:34
короче, обычный тролль.

Расходимся
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 09:38  [ТС]
А вы по всей видимости искали какого-то необычного. Вынужден вас разочаровать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.04.2026, 09:38

Ошибка, указывающая на неинициализированные переменные
#include <iostream> #include <Windows.h> using namespace std; int main() { setlocale(0, "");...

Ошибка: неинициализированные переменные
Требовалось оформить класс ORDER, ошибка на 103-ей строке про неинициализированные переменные,...

Неинициализированные переменные
Здравствуйте. Возникла проблема с инициализацией переменных и конструкторов производного класса,...

Где и как могут применяться неинициализированные массивы?
Хотелось бы узнать где и как могут применяться неинициализированные массивы.

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно....


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно» Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую: Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий? Да, такие данные есть, и они хорошо описаны и в российской,. . .
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу: https:/ / github. com/ altbodhi/ ReConMan По итогу пришел к мысли, что DU не дружат с существующими технологиями. От сериализации до отображения в реляционную. . .
Администрация Хабра удаляет новые энергоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерированы
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru