Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
1

Освобождение памяти при удалении структуры

30.08.2014, 12:57. Показов 1615. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть структура с указателем на блок памяти, если удалить структуру,память внутри структуры освободится или же надо освободить память внутри структуры?

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct test
{
    char * name;
    test(char* a)
    {
        int len = strlen(a) + 1;
        name = new char[len];
        strcpy_s(name, len, a);
    }
};
 
int main()
{
    test *a = new test("wwww");
    char *b = a->name;
    delete a;
    std::cout << b;
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2014, 12:57
Ответы с готовыми решениями:

Структуры. Освобождение памяти
#include &quot;stdafx.h&quot; #include&lt;iostream&gt; using namespace std; struct Film { char * name; int...

Освобождение памяти членов структуры(класса)
Всем привет! Ситуация: struct S1 { char * Data; S1() {

Правильное освобождение памяти при std::vector
vector&lt;Worker*&gt; workers; workers.push_back(new Worker(&quot;Jack&quot;, 1000)) Как теперь правильно...

Освобождение выделенной памяти при закрытии программы
Добрый вечер. Подскажите, при закрытии программы, вся память что была выделена внутри программы...

3
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
30.08.2014, 13:02 2
Надо освободить.
1
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
30.08.2014, 13:11 3
Нужно сделать деструктор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct A{
    char* name;
    A(){
        name = new char[10];
    }
    ~A(){
        delete name;
        std::cout << "destroyed!";
    }
};
 
int main() {
    A* a = new A;
    delete a;
    return 0;
}
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.08.2014, 23:27 4
Лучший ответ Сообщение было отмечено MousePro как решение

Решение

MousePro, всё что выделяется через new, должно быть удалено через delete. Явно или неявно (всякие классы умных указателей например).
MastAKK, при выделении массива и освобождать нужно массив, т.е. в 9 строке должно быть:
C++
1
delete [] name;
Простое правило: если квадратные скобки были в new, то они должны быть и в delete.
1
30.08.2014, 23:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2014, 23:27
Помогаю со студенческими работами здесь

Освобождение памяти при возникновения исключения в конструкторе
class IScene{ public : virtual void Draw() const = 0; } class Scene: public IScene {...

Освобождение памяти при исключениях и именованные исключения
Есть 2 вопроса, ответы чет не удалось загуглить 1)Каким образом выполняется освобождение памяти...

Утечка памяти при удалении
Здравствуйте! Возникла проблема при удалении последнего элемента из двусвязного списка. Вот...

Вылетает при удалении памяти
У меня тут конфуз: class InversTree { struct element { double data; ...

Выводит ошибку при удалении динамической структуры
При удалении динамической струтуры выдаёт ошибку Удаляю две струтуры . Первую удаляет...

Ошибка при удалении динамически выделенной памяти
Добрый день, хочу удалить выделенный массив, но выдает ошибку. Вот собственно код создаваемой...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru