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

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

11.07.2019, 16:31. Показов 3070. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Администрация Хабра удаляет новые алгоритмы, которые не западно ориентированной философии кода, без уведомлений и объяснений.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru