Форум программистов, компьютерный форум CyberForum.ru

Найти ошибку в функции - C++

Восстановить пароль Регистрация
 
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
24.03.2010, 23:29     Найти ошибку в функции #1
C++
1
2
3
4
int&  f(){
int *a=new int;
return *a;
}
скопилировал-ошибок нет...но тут ясно что не очищается памяь,знаю...надо делете написать,Но функция возвращает указатель а при объявлении было написано & то есть ссылка,объясните что тут такое...?

Добавлено через 18 секунд
почему компилятор не находит ошибки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Зоти Сергей
 Аватар для Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
25.03.2010, 00:27     Найти ошибку в функции #2
Потому, что функция возращает не указатель, а значение int, находящееся по адресу указателя "a"
Если бы возращался указатель, то было бы написано
return a; Тогда компилятор выдал бы ошибку.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
25.03.2010, 18:27  [ТС]     Найти ошибку в функции #3
Зоти Сергей, а если писать
C++
1
int *func()
?

Добавлено через 10 секунд
это разве не тоже самое
yanyk1n
 Аватар для yanyk1n
4324 / 1455 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
25.03.2010, 18:31     Найти ошибку в функции #4
МедведЪ, int& - возвращает ссылку на тип int
int* - возвращает указатель на int
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
25.03.2010, 18:55  [ТС]     Найти ошибку в функции #5
k1ry4, а что это такое означает?
Цитата Сообщение от МедведЪ Посмотреть сообщение
return *a;
yanyk1n
 Аватар для yanyk1n
4324 / 1455 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
25.03.2010, 19:00     Найти ошибку в функции #6
МедведЪ, возвращает то значение, которое записано по адресу a
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
25.03.2010, 19:05  [ТС]     Найти ошибку в функции #7
k1ry4, хм...значит эта функция просто возвращает ссылку?
yanyk1n
 Аватар для yanyk1n
4324 / 1455 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
25.03.2010, 19:07     Найти ошибку в функции #8
МедведЪ, как видишь, да
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
25.03.2010, 19:20     Найти ошибку в функции #9
МедведЪ:
Про это в книге есть что-нибудь.
C++
1
int ********func(void******,...);
Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
10
int&  f(){
int *a=new int;
return *a; /*трактуется как разадресация, при разадресации мы можем брать ссылку на динамический объект. */
}
 
int main(){
int &p = f();
delete &p;   
return 0;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
25.03.2010, 19:26     Найти ошибку в функции #10
МедведЪ, в данном случае надо четко понимать различие ссылки и указателя.

Указатель это переменная, хранящая адрес объекта.
Для получения адреса объекта можно воспользоваться операцией взятия адреса &.
Пример:
C++
1
2
int n = 10;
int* p = &n;
В данном примере получаем адрес переменной n и записываем его в указатель p.

Для доступа к объекту, адрес которого хранит указатель можно использовать операцию разименовения указателя *.
Пример:
C++
1
2
3
int n = 10;
int* p = &n;
int m = *p;
В результате выполнения данного фрагмента переменная m получит значение равное 10.

Ссылка является псевдонимом некоторого объекта. При изменении псевдонима изменяется и сам объект, и наоборот, при изменении объекта изменяться псевдоним.
Пример:
C++
1
2
3
4
int n = 10;
int& r = n;
n = 1; // n == 1, r == 1
r = 2; // n == 2, r == 2
Здесь мы объявили ссылку r на переменную n.

Ссылка по сути является разименованным константным указателем.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
25.03.2010, 19:33  [ТС]     Найти ошибку в функции #11
CyBOSSeR, да я все это хорошенько зубрил..но про функцию начал возмущаться
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
25.03.2010, 19:34     Найти ошибку в функции #12
Поясню термин что бы было понятно: разадресация == разыменование .
Это одни и те же понятия.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
25.03.2010, 19:37  [ТС]     Найти ошибку в функции #13
ладно,я понял..когда скажем пишем
C++
1
2
3
int *a=0;
int b=0;
a=&b;
вот этот оператор & тоже самое и для функции,то есть тоже самое действие выполняет

Добавлено через 1 минуту
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Поясню термин что бы было понятно: разадресация == разыменование .
Оо я про это ниче не знаю...думаю узнаю
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
25.03.2010, 19:44     Найти ошибку в функции #14
Почитай то что написал CyBOSSeR тогда узнаешь.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
25.03.2010, 19:49  [ТС]     Найти ошибку в функции #15
про разадрессацию не знаю...а разыменование знаю
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
25.03.2010, 19:52     Найти ошибку в функции #16
Цитата Сообщение от МедведЪ Посмотреть сообщение
про разадрессацию не знаю...а разыменование знаю
Это одно и тоже.
breate
 Аватар для breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
26.03.2010, 02:49     Найти ошибку в функции #17
Цитата Сообщение от МедведЪ Посмотреть сообщение
про разадрессацию не знаю
я тож такого термина не слышал
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2010, 10:52     Найти ошибку в функции
Еще ссылки по теме:

Указатели на функции, найти ошибку в коде C++
Не могу найти ошибку в функции C++
C++ Найти ошибку в коде функции поиска

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

Или воспользуйтесь поиском по форуму:
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
26.03.2010, 10:52     Найти ошибку в функции #18
разадрессацию:
А в одной литературе может написано разадрессация, а в другой разыменование.
У меня есть книга в которой и то и другое называют, и так понятно о чём речь.
Yandex
Объявления
26.03.2010, 10:52     Найти ошибку в функции
Ответ Создать тему
Опции темы

Текущее время: 02:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru