0 / 0 / 0
Регистрация: 13.08.2019
Сообщений: 4
1

Проблемы с созданием локальных переменных

13.08.2019, 22:50. Показов 305. Ответов 2
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int* f() {
    int* p = new int;
    int k = 5;
    p = &k;
    return p;
}
 
int main()
{
    cout << *f();
}
Как я понимаю, т.к. здесь переменная k создана локально, код выше не должен выводить 5, однако делает это. Я подумал, что в памяти как бы остаётся сама цифра 5, но ссылка на нее при выходе из функции удаляется, а т.к. здесь я ее сохраняю, все работает, это так?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2019, 22:50
Ответы с готовыми решениями:

Рассмотреть программу, написать имена глобальных переменных, локальных переменных, формальных параметров
Program P1; var s:string; procedure P(var s:string) ; var i, j : integer; ...

Проблемы с созданием класса
class Source { Source(String login,String password,String other) { ...

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

Проблемы с созданием Ln логарифма
Всем привет, прошу прощения что пишу вам с такой просьбой, помочь сделать программу для решения Ln...

2
nd2
3416 / 2796 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
13.08.2019, 23:25 2
Цитата Сообщение от Karant0107 Посмотреть сообщение
подумал, что в памяти как бы остаётся сама цифра 5, но ссылка на нее при выходе из функции удаляется, а т.к. здесь я ее сохраняю, все работает, это так?
Память под переменной помечается как свободная, старое значение может быть не затёрто новым значением, может быть затёрто, зависит от кода.

Добавлено через 21 минуту
Цитата Сообщение от Karant0107 Посмотреть сообщение
а т.к. здесь я ее сохраняю
Сам указатель у тебя тоже локальный (память под которым освобождается после выхода из функции), возвращаешь его копию, которая будет существовать, пока не закончится вывод на консоль.
2
303 / 215 / 74
Регистрация: 23.05.2011
Сообщений: 971
14.08.2019, 00:18 3
Цитата Сообщение от Karant0107 Посмотреть сообщение
int* p = new int;
int k = 5;
p = &k;
Вот тут у тебя утечка памяти.

Цитата Сообщение от Karant0107 Посмотреть сообщение
p = &k;
return p;
Вот тут у тебя UB.
А раз это UB, то может быть что угодно от вывода 5 до взрыва твоего компьютера.

C++
1
2
3
4
5
6
int* f() {
   int* p = new int;
   int k = 5;
   *p = k;
   return p;
}
Вот так было бы без ошибок.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2019, 00:18

Проблемы с созданием объектов
Описан класс TPlanet: TPlanet = class (TObject) public name: string; ...

Проблемы с созданием словаря на C++
Ребята-программисты, нужна срочная помощь, выдаёт такие ошибки: E0291 для класса &quot;Term&quot; не...

Проблемы с созданием объекта
Есть два класса public class Tname { public string name_eng; public...

О локальных переменных
В функцию в качестве аргумента приходит таблица data = { 'a', 'b', 'c', 'd', 'e' } Для удобства я...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.