Здравствуйте, гость ( Вход | Регистрация )
|
Litkevich Yuriy |
2.2.2008, 16:24
Сообщение
#1
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Переменные созданные внутри функций живут пока мы невышли из фукции, так вроде.
Видел такую вещь: т.е. функция возвращает указатель на масив, который в ней же создан. Но покинув функцию масив прекратит существование и указатель будет показывать в кучу проги, например, может показывать в неосмысленное место. Я правильно понимаю, т.е. это косячек програмиста, или как-то это иначе работает применительно просто к C++? |
|
|
|
![]() |
|
Andrew Selivanov |
4.2.2008, 11:37
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: 6
|
Цитата(Tonal @ 4.2.2008, 11:16) Link А вот auto_ptr с массивом использовать не надо - убъёть! Litkevich Yuriy Проще всего переделать код на использование vector<int>. С ним твоя исходная функция будет выглядеть так: А использовать её будешь так: Написано об этом очень хорошо у Страуструпа в самом начале "Язык программирования С++ 3ед." - книжка, которую каждый уважающий себя программист на С++ должен прочитать и понять. Мммм... вариант, но мне кажется, что так будет несколько неудобно обрабатывать ошибку (т.е. нулевое значение при возврате), кроме того ( поправьте если ошибаюсь), из временного внутреннего вектора будет лишнее копирование. Мне кажется, корректней будет так: Ну и typedef не забыть если это конкретный тип, или сделать сразу шаблончик из функции И еще вариант: можно вернуть итератор... |
|
|
|
Litkevich Yuriy Время жизни переменных 2.2.2008, 16:24
archimed7592 Цитата(Litkevich Yuriy @ 2.2.2008, 16:24)... 2.2.2008, 16:30
Litkevich Yuriy Т.е. если мы делаем так:
int *pntr;
int b;
pntr =... 2.2.2008, 16:39
archimed7592 Нет, это не гарантируется. Я тебе рассказал как эт... 2.2.2008, 16:43
Litkevich Yuriy понял, значит я не зря переписал этот кусок кода, ... 2.2.2008, 17:07
archimed7592 Litkevich Yuriy, Цитата(Litkevich Yuriy @ 2.2... 2.2.2008, 17:41
Litkevich Yuriy Цитата(archimed7592 @ 2.2.2008, 20:41) ум... 2.2.2008, 20:26
archimed7592 Самый примитивный пример, не требующий особых тело... 2.2.2008, 20:35
Litkevich Yuriy Цитата(archimed7592 @ 2.2.2008, 23:35) Ал... 2.2.2008, 20:48
Tonal А вот auto_ptr с массивом использовать не надо - у... 4.2.2008, 11:16
AD22 Цитата(Tonal @ 4.2.2008, 11:16) А вот aut... 5.2.2008, 13:39
Tonal Если это действительно ошибка - кидай исключение.
... 5.2.2008, 8:37
Litkevich Yuriy Цитата(Tonal @ 5.2.2008, 11:37) видно что... 5.2.2008, 10:58![]() ![]() |
|
Текстовая версия | Сейчас: 16.12.2025, 0:34 |