|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.05.2023, 17:29 | #1 |
Форумчанин
Регистрация: 12.09.2008
Сообщений: 624
|
Ссылка на массив из функции, вывод значений элементов массива
Здравствуйте!
Подскажите, пожалуйста, почему так получается?: Хочу вывести значения элементов массива при помощи ссылки на него, но у меня выводится какое-то не понятное значение. 1 -858993460 -858993460 Подскажите, пожалуйста, что ни так я делаю? Код:
|
07.05.2023, 17:51 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Массив объявлен локально и будет размещен на стеке, так что адрес массива будет валидным до конца функции. Нужно динамически выделять память, чтобы возвращать адрес, или работать с более высокоуровневыми классами (например, вектором):
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
07.05.2023, 18:03 | #3 |
Форумчанин
Регистрация: 12.09.2008
Сообщений: 624
|
Почему тогда у автора этого видео все работает?
https://youtu.be/bRJLPFmC_Ls?list=PL...hGTOOTy&t=1547 |
07.05.2023, 18:21 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
"Чудом сработало" != "корректная программа". Данные из стека никуда не пропали, поэтому и выдало ожидаемое, но так делать нельзя. Похоже, автор недостаточно компетентен, чтобы учить других. Студия выдает предупреждение "Warning C4172 returning address of local variable or temporary: b" на данный код, но у автора окно с ошибками и предупреждениями за кадром. Плохой пример:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 07.05.2023 в 18:27. |
07.05.2023, 18:28 | #5 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Код:
Не надо так делать. Стоит действительно выделять память динамически и копировать данные в нее, а не возвращать адреса локальных переменных. Об этом компилятор кстати предупреждает, хотя программа и создаётся. |
07.05.2023, 18:46 | #6 |
Форумчанин
Регистрация: 12.09.2008
Сообщений: 624
|
|
07.05.2023, 18:52 | #7 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
|
07.05.2023, 20:21 | #8 | |
Форумчанин
Регистрация: 12.09.2008
Сообщений: 624
|
Цитата:
Я верно понимаю? |
|
07.05.2023, 20:40 | #9 | |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Цитата:
В том тексте, что я привёл выше по адресам 0x55555555519d располагается код функции. Он никуда не удаляется. А вот в конце, есть часть отображающая стек функции по адресам 0x00007FFFFFFFD820. Это и есть блок локальных переменных функции. Он существует (не доступен для перезаписи другими блоками) во время исполнения функции. Но при возврате из функции адреса увеличиваются и память высвобождается из под этого блока локальных переменных. Это просто в двух словах. Подробнее читайте при работу процессора и ЯП ассемблер. Последний раз редактировалось macomics; 07.05.2023 в 20:45. |
|
08.05.2023, 09:47 | #10 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
глянул этот "урок" - косяк на косяке
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проверьте решение задачи: Дан массив. Получить новый массив, выбросив из исходного массива все члены со значением max(а1 ,а2 , ... , аn). Определить число элементов нового массива. | ParkerVans | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 23.10.2017 19:03 |
Дан массив m*n. Составить массив из наименьших элементов каждой строки данного массива. Найти сумму наибольшего и наименьшего элемента массива. | Miriam_ | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 23.04.2017 11:18 |
в массиве В из 30 элементов определить диапазон значений элементов массива | Zhentos | Паскаль, Turbo Pascal, PascalABC.NET | 9 | 15.06.2011 00:10 |
Вывод элементов массива.Изменение элементов массива. | Vesnushka18 | Помощь студентам | 6 | 09.06.2011 13:05 |
Одномерный массив. Вывод номеров отрицательных элементов массива. | RomashkaGT | Помощь студентам | 3 | 25.02.2011 08:44 |