Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347

Указатель и стек

11.07.2019, 16:31. Показов 3267. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, скажите мне, есть ли тут утечка?
C++
1
2
3
int *a = 123;
for(int i = 0; i < 1000000; i++)
int *b = a;
т.е. указатель b удалиться ли из памяти или нет?
Я понимаю что объект на который он указывает будет существовать (без delete) но сам указатель занимает 4-8 байт, будет ли тут каждый указатель b сохранен или при окончании итерации он удалится из памяти?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.07.2019, 16:31
Ответы с готовыми решениями:

А почему нельзя передавать в ф-ю добавления элемента в стек один указатель? Почему нужен именно указатель на указатель?
Вот код ф-ии добавления элемента в стек: void push1(Node **top, int d) { // top – указатель начала стека Node *pv;...

Создать стек, содержащий исходные числа, и вывести указатель на его вершину
Дано число N (&gt;0) и набор из N чисел. Создать стек, содержащий исходные числа (последнее число будет вершиной стека), и вывести указатель...

Дано число D и указатель P1 на вершину непустого стека. Добавить элемент со значением D в стек
Дано число D и указатель P1 на вершину непустого стека. Добавить элемент со значением D в стек и вывести адрес P2 новой вершины стека.

24
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
13.07.2019, 15:00
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от rat0r Посмотреть сообщение
123 это число (int), а записываем в указатель. Каст целое-указатель implementation-defined, за исключением каста указателя на объект в целое (если влезает) и обратно. Документация gcc говорит что всё, кроме требуемого стандартом минимума, UB.
Абсолютно не важно, как отработает каст. В рантайме от этого ничего не изменится. Писать мусор в память и падать там нечему и негде.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
13.07.2019, 15:05
Цитата Сообщение от Vourhey Посмотреть сообщение
В рантайме от этого ничего не изменится. Падать там нечему и негде.
Абсолютно не важно, будет что-то у кого-то падать.
Существуют вполне обычные, не экзотические, реализации, которые говорят, что каст произвольного целого к указателю это UB.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
13.07.2019, 21:34
Цитата Сообщение от rat0r Посмотреть сообщение
Абсолютно не важно, будет что-то у кого-то падать.
Только это и важно. Это суть этой темы. Вот как раз, что не важно, так это как инты будут каститься в указатели. Ты отвечаешь без контекста. А у меня он есть:
Цитата Сообщение от IGPIGP Посмотреть сообщение
Если сразу не закрешится, может поломать систему в некоторых архитектурах. Нельзя писать куда попало. А ваш указатель инициализируется мусором, то есть смотрит в непредсказуемое место. И в это место вы пишете 123. Это не должно хорошо кончиться. Но может. Тогда это назовут UB.
Здесь никакого UB нет. Мы с тобой говорим о соверешенно разных вещах. Ты рассуждаешь о строчках кода и возможном UB в нем. А я отвечаю на утверждение про запись мусора в память и про потенциальный крэш.
Цитата Сообщение от rat0r Посмотреть сообщение
Существуют вполне обычные, не экзотические, реализации, которые говорят, что каст произвольного целого к указателю это UB.
Мне, в общем-то, без разницы, что они говорят. Я и так знаю, как будет вести себя код в данном случае. Будь компилятор хоть экзотический, хоть нет.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.07.2019, 21:48
Цитата Сообщение от Vourhey Посмотреть сообщение
А я отвечаю на утверждение про запись мусора в память
Я не говорил о записи мусора. Мне показалось, что код выглядит как-то так:
C++
1
2
3
4
int a=123,
*b;
for(i=0; i<10000; ++i)
*b=a;
Плохо вчитался, каюсь. Я не ожидал такого перла как int *a=123 потому что это не компилируемый код. Вот и решил, что происходит запись по не инициализированному указателю b (в котором адрес задан мусором) числа 123. И это подвигло меня написать то, что я написал.
Но как можно рассуждать о UB в коде, который не компилируется? Что касается несовпадения размеров то, кроме размеров указателей на методы у компиляторов майкрософт (не знаю у всех ли), мне не известны другие проблемные моменты. Но и это не важно. В конце концов и за сужающее преобразование отвечает программист. Тут необязательно даже, чтобы в указателе лежало 123, а важно чтобы лежало то, что нужно написавшему код. Предыстория и возможность того, что данная память принадлежит объекту другого типа и возможное нарушение алиэйзинг тоже не важно. Мы не знаем предыстории и не видим разыменования. Если кому-то нужно прочесть из данного указателя именно целое число 123, это его личное дело.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
13.07.2019, 22:25
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я не говорил о записи мусора. Мне показалось, что код выглядит как-то так:
Да я все понимаю, что просто код неправильно прочитал, бывает. Поэтому и ответ в контексте того, что ты написал, а не про абстрактный код в вакууме. Я не про то, что кто-то ошибся и это ужасно. Просто, блин, всегда есть контекст. Я общался с тобой в определенном контексте про запись в память по левому адресу, в курсе которого был ты и я. Тут приходит чувак, вырывает фразу из контекста, и начинает про кастинги заливать. Это я ему и объясняю.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Но как можно рассуждать о UB в коде, который не компилируется?
Да все нормально будет! Код как код, самый обычный
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.07.2019, 22:25

Как создать указатель на вершину стека ? Объединить числа из двух упорядоченных стеков в третий упорядоченный стек
Всем привет . Как в С# создать указатель который указывает на вершину стека ? прошу максимально простой синтаксис , потому что мало что еще...

Дан указатель P1 на вершину стека (если стек пуст, то P1 = nil). Извлечь из стека все элементы и вывести их значения
Динамические структуры данных Все числа, используемые в заданиях на динамические структуры данных, являются целыми. Все указатели...

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

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

создать стек,заполнив числами 1,2,3...n.Посмотреть его содержимое,удалить стек
Всем привет!помогите,пожалуйста!!! создать стек,заполнив числами 1,2,3...n.Посмотреть его содержимое,удалить стек


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru