Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245

Функция, возвращающая указатель

12.12.2013, 22:59. Показов 1133. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Пускай есть класс Some_type и массив такого класса. Можно ли функцией Some_type* some_name (some_type) заполнять массив, если ею возвращается указатель на объект созданный с помощью new?

И мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Pizza db[count];
 
  for (int i {}; i < count; ++i)
  {
    *(db+1) = get_item();
  }
 
Pizza* get_item();
{
    Pizza* item = new Pizza;
    cout << "\nEnter name of product:\n";
    cin.getline(item->name, arr_size);
    cout <<  "\nEnter name of manufacturer:\n";
    cin.getline(item->mnfc, arr_size);
    cout <<  "\nEnter size of pizza:\n";
    cin >> item->dmtr;
    cin.get();
    cout <<  "\nEnter mass of product:\n";
    cin >> item->mass;
    cin.get();
 
    return item;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.12.2013, 22:59
Ответы с готовыми решениями:

Функция, возвращающая указатель
Добрый вечер. Требуется написать программу, содержащую структуру вида type1 *имя(type2); т.е. функцию, которая принимает аргумент типа...

Функция, возвращающая указатель
Нужно написать функцию, входящие параметры которой являются указателем на структуру. Заполнить в функции структуру (не важно). Возвратить...

Функция, возвращающая указатель на структуру
Помогите пожалуйста понять в чем ошибка! Функция create должна возвращать указатель на структуру Vector #include &lt;iostream&gt; ...

12
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:12
Можно.
1
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
12.12.2013, 23:16  [ТС]
А почему тогда мне такую ошибку выдает?
error: no match for ‘operator=’ in ‘*(((Pizza*)(& db)) + 80u) = get_item()’|
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:32
У вас же массив не указателей. Что вы в массив пытаетесь указатель поместить?
C++
1
*(db + i) = *get_item();
Только утечка памяти будет. Сначала сохраните указатель, потом поместите содержимое по указателю в массив, потом освободите память под указателем.
1
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
12.12.2013, 23:41  [ТС]
Спасибо!
Вы имелли ввиду примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Pizza* get_item()
{
    Pizza* item = new Pizza;
    cout << "\nEnter name of product:\n";
    cin.getline(item->name, arr_size);
    cout <<  "\nEnter name of manufacturer:\n";
    cin.getline(item->mnfc, arr_size);
    cout <<  "\nEnter size of pizza:\n";
    cin >> item->dmtr;
    cin.get();
    cout <<  "\nEnter mass of product:\n";
    cin >> item->mass;
    cin.get();
    Pizza item_copy;
    item_copy = *item;
    delete item;
    return &item_copy;
}
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.12.2013, 23:50
Цитата Сообщение от andrejap Посмотреть сообщение
Вы имелли ввиду примерно так:
Нет, я имел ввиду так (get_item() из первого поста):
C++
1
2
3
4
5
6
for (int i = 0; i < count; ++i)
{
    Piza* p = get_item();
    *(db + i) = *p;
    delete p;
}
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:06  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Только утечка памяти будет.
Простите, а где же там будет утечка? Вот где может быть утечка в функции, кажется, понимаю. А вот в вызывающей ф-ии - не пойму.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:11
Цитата Сообщение от andrejap Посмотреть сообщение
Простите, а где же там будет утечка?
Там - это где?
Цитата Сообщение от alsav22 Посмотреть сообщение
Только утечка памяти будет.
Я разве указал место? Утечка памяти будет в коде из первого поста.
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:16  [ТС]
То есть, если не гнаться за рационализмом, то и мой исправленный вариант прокатывает (где есть return &item_copy)?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:25
Утечка памяти - это когда теряется возможность доступа к динамически выделенной памяти. А теперь скажите: в каком месте вашего кода (из первого поста) теряется такой доступ?

Добавлено через 7 минут
Цитата Сообщение от andrejap Посмотреть сообщение
То есть, если не гнаться за рационализмом, то и мой исправленный вариант прокатывает (где есть return &item_copy)?
Если очень сильно не гнаться...
Цитата Сообщение от andrejap Посмотреть сообщение
где есть return &item_copy
Лучше так не делать, компилятор пишет:
C++
1
warning C4172: возвращение адреса локальной или временной переменной
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:38  [ТС]
Получается, функция get_item выделяет память, значение в этих ячейках затем идет в цикл. Но при новых "циркуляциях" цикла, эти ячейки остаются заняты значениями, а доступ к ним теряется. Да?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.12.2013, 00:46
В общем и целом, да.
1
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
13.12.2013, 00:47  [ТС]
Мерси.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2013, 00:47
Помогаю со студенческими работами здесь

Функция, возвращающая указатель на функцию
Здравствуйте, у меня есть универсальная ф-ия, которая возвращает указатель на одну из трёх ф-ий. Каждая из тех трёх функций по-своему...

Функция возвращающая указатель на int
Не могу понять ошибки. // prata 7 pt to function.cpp : Defines the entry point for the console application. // #include...

Функция, возвращающая умный указатель
Здравствуйте, помогите пожалуйста создать функцию, возвращающую умный указатель. Мой вариант не рабочий: class InterfaceVideo{ public:...

Функция, возвращающая указатель на функцию
Всем привет, Мне нужно создать функцию, которая будет возвращает указатель на функцию. Я создам массив указателей на функцию, присвою...

Функция, возвращающая указатель на структуру
Ребят помогите пожалуйста,как создать функцию возвращающую указатель на структуру,в общем задание звучит так:написать библиотеку для...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru