-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29

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

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

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, если использование неинициализированных указателей в С++ сопряжено с рисками неопределённого поведения и случайного доступа к памяти, то для каких целей в языке оставлена возможность объявления неинициализированных указателей?
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"...

130
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,325
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
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,337
15.04.2026, 08:00
Also what, моя последняя попытка:

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

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

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

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

Эти числа не имеют смысла. И никто не пойдёт вводить их в качестве пароля или искать дом по этому адресу
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 08:22  [ТС]
Алексей1153, Ну почему же не имеют смысла. Всему при желании можно найти применение. По факту число есть? Есть. Указателю адрес на это число присвоен? Присвоен. Утверждение "неинициализированному указателю совсем-совсем ничего не присваивается" ложно? Ложно. Кто и когда туда записал это число вообще вопрос десятый, главное что неинциализированный указатель на него ссылается и мы при желании можем его считать и даже изменить если захотим. А насчет использования/бесполезности - почему бы не использовать это рандомое число вместо функции предоставляющей рандомное число например.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,325
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
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,325
15.04.2026, 08:42
Цитата Сообщение от Also what Посмотреть сообщение
а зачем вы мне раз за разом указываете спецификацию неинициализированной переменной, если мой вопрос о неинциализированном указателе?
Ым... Вот это поворот... Но в языке С++ понятие инициализации/инициализированности применимо только к объектам, то есть к переменным.

А вы оказывается что-то новое придумали, но нам до сих пор не сказали. Так расскажите же нам тогда, о чем вы вообще ведете речь. Я весь в нетерпении.
0
-342 / 1 / 0
Регистрация: 27.12.2025
Сообщений: 29
15.04.2026, 08:45  [ТС]
О неинциализированных указателях и только. Указатель ссылается на переменные, но не является ими. Разве в спецификации это не написано?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,325
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
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,325
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
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,337
15.04.2026, 09:18
Also what, предлагаю найти пять отличий в функциях f1 и f2 (ну, кроме имён)

https://godbolt.org/z/xKf7dvTr3



Если удалось найти отличия, поздравляю, программирование - это не твоё
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,325
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
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,337
15.04.2026, 09:27
Also what, так, а ещё три отличия ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,325
15.04.2026, 09:31

Не по теме:

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



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

Добавлено через 2 минуты
Вы думаете? Мне показалось, что вы точно знаете.
0
фрилансер
 Аватар для Алексей1153
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,337
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru