Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815

Удаление структуры в куче

05.04.2020, 14:58. Показов 1303. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте! У меня такой вопрос. У меня есть функция, там я создаю новую структуру в куче, ее я присваиваю вне функции структуре при объявлении в стеке. Не могу понять как писать delete. Ведь я уже не могу обратиться к адресу переменной в куче вне функции. Или у структуры есть свой деструктор для такой задачи?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2020, 14:58
Ответы с готовыми решениями:

файлы, структуры, строки, все в куче
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <iostream> #include <string> #include "cstring" ...

Удаление кучи в куче
Доброго. У меня возник такой вопрос: имею я некую структуру struct inbase { int *data; }; в коде (не важно где) я...

Удаление переменных в куче, созданных статическим методом класса
Добрый вечер форумчане. При изучении паттернов проектирования наткнулся на следующий код: #include <iostream> #include...

6
фрилансер
 Аватар для Алексей1153
6466 / 5683 / 1131
Регистрация: 11.10.2019
Сообщений: 15,128
05.04.2020, 16:01
ram876, покажи код
0
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
05.04.2020, 16:11  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
const int SIZE = 60;
struct mamba {
    char cha[20];
};
mamba & show(mamba & a);
int main()
{
    using namespace std;
    mamba ram{
        "text"
    };
    mamba mar = show(ram);
    cout << ram.cha << "  " << (void*)&ram.cha[0]<<endl;
    cout << mar.cha << "  " << (void*)&mar.cha << endl;
    mar.cha[1] = 'a';
    cout << mar.cha << "  " << (void*)&mar.cha[0] << endl;
    
    //delete &mar;
    
    return 0;
}
 
mamba & show(mamba & a) {
    mamba * b = new mamba;
    *b = a;
    std::cout << b->cha << " B  " << (void*)b->cha << std::endl;
    return * b;
}
На название функции не обращайте внимания. Раньше функция другое делала.
p.s. А как на форуме имя пользователя вставляется? Не смог разобраться.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
05.04.2020, 16:17
Ты не должен терять указатель. Сама программа неправильная.
1
 Аватар для Annemesski
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,692
05.04.2020, 16:18
Лучший ответ Сообщение было отмечено ram876 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Foo {};
 
Foo * getFoo(void)
{
    Foo *f = new Foo;
    return f;
}
 
int main(void)
{
    Foo *f = getFoo();
// --- do something ---
    delete f;
    return 0;
}
1
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
05.04.2020, 16:22  [ТС]
Annemesski, Спасибо!
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
05.04.2020, 17:03
ram876, если править ваш изначальный код, то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
 
const int SIZE = 60;
struct mamba {
    char cha[20];
};
mamba & show(const mamba & a);
int main()
{
    using namespace std;
    mamba ram{
        "text"
    };
    mamba & mar = show(ram); // mar - обязательно ссылка!
    cout << ram.cha << "  " << (void*)&ram.cha[0]<<endl;
    cout << mar.cha << "  " << (void*)&mar.cha << endl;
    mar.cha[1] = 'a';
    cout << mar.cha << "  " << (void*)&mar.cha[0] << endl;
    
    delete &mar; // получаем адрес
    
    return 0;
}
 
mamba & show(const mamba & a) {
    mamba * b = new mamba(a);
    std::cout << b->cha << " B  " << (void*)b->cha << std::endl;
    return *b;
}
Однако вам правильно выше сказали, ссылка - это семантика значения. Вам же нужен адрес. Неверно использовать значение там, где нужен адрес.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2020, 17:03
Помогаю со студенческими работами здесь

Помещение структуры в вектор, удаление структуры, изменение элементов структуры
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Где структуры размещают данные: в стэке или в куче
Это из спецификации: Struct constructors are invoked with the new operator, but that does not imply that memory is being...

Если для структуры используется оператор new, то память выделяется в куче или на стеке?
Если для структуры используется оператор new, например, так: struct SomeStruct { }

Удаление из структуры по позиции
дана структура одежда(название,цена, размер).написать программу на си,которая удаляет запись с вводимой позиции. я написала функцию,...

Удаление структуры из файла
Всем привет. У меня такая ситуация: записываю в бинарный файл заполненную структуру. Потом пользователь &quot;удаляет&quot; ее путем...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru