С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 16.05.2021
Сообщений: 3
1

Удаляется ли динамический массив после выхода из функции?

26.05.2021, 11:10. Показов 1364. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
например
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
void a ()
{
 int *ar = new int [5];
}
int main()
{
 
a();
return 0;
}
останется ли этот массив после выхода из функции?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2021, 11:10
Ответы с готовыми решениями:

Не удаляется Visual Studio 2013 после выхода из строя HDD
Имелось 2а hdd устройства, на одном windows на другом visual studio. Жесткий диск на котором была...

Не удаляется динамический массив
Имеется такой код: short *Ind = nullptr; if (iCnt > 0) { Ind = new short; memset(Ind,...

Динамический массив структур (не происходит передачи и некорректно удаляется)
Всем привет! Решил изучить динамический массив через realloc... Написал простенькую...

После использования free? он не оказывает влияния после выхода из функции
Есть вот такая функция в которой используется free() void removeNode(struct Node** t) { int...

7
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.05.2021, 11:14 2
Цитата Сообщение от GarryAlways Посмотреть сообщение
Удаляется ли динамический массив после выхода из функции?
нэт.
Цитата Сообщение от GarryAlways Посмотреть сообщение
останется ли этот массив после выхода из функции?
- да.
- что да?
- тоже нэт.
1
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
26.05.2021, 12:10 3
в памяти останется, но для программы потеряется, если ar не будет никуда return или присвоен внешней переменной или ещё каким-то образом сохранён в переменных программы. Без попытки спасти ar это называется утечка памяти.
0
Модератор
Эксперт CЭксперт С++
5201 / 2918 / 1509
Регистрация: 14.12.2018
Сообщений: 5,260
Записей в блоге: 1
26.05.2021, 12:42 4
Цитата Сообщение от GarryAlways Посмотреть сообщение
например
Правильно будет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int* a()
{
    int* ar = new int[5];
    return ar;
}
int main()
{
    int* p = a();
    if (p)
        delete[] p;
    return 0;
}
Или много других вариантов (см. здесь).
0
1710 / 1110 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
26.05.2021, 13:08 5
Цитата Сообщение от Volga_ Посмотреть сообщение
C++
1
2
3
int* p = a();
    if (p)
        delete[] p;
не совсем:
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
    int *p = new int;
    delete p;
    if(p) std::cout << "FFF"; ///FFF!!!
  //if(p) delete p; //   BOOM!
 
    /****************/
 
    int *x = nullptr;
    x = new int;
 
    if(x != nullptr)
    {
        delete x;
        x = nullptr;
    }
 
    if(x) std::cout << "XXX"; // ___
    if(x != nullptr) // OK
    {
        delete x;
        x = nullptr;
    }
    if(x != nullptr) //Ok
    {
        delete x;
        x = nullptr;
    }
1
Модератор
Эксперт CЭксперт С++
5201 / 2918 / 1509
Регистрация: 14.12.2018
Сообщений: 5,260
Записей в блоге: 1
26.05.2021, 13:23 6
Цитата Сообщение от Folian Посмотреть сообщение
не совсем:
Цитата Сообщение от Folian Посмотреть сообщение
if(x != nullptr) //Ok
    {
        delete x;
        x = nullptr;
    }
Да. Память у меня уже освобождена, но указатель нужно приводить в nullptr. Спасибо.
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.05.2021, 21:59 7
Цитата Сообщение от Volga_ Посмотреть сообщение
Правильно будет:
Цитата Сообщение от Volga_ Посмотреть сообщение
if (p) delete[] p;
не совсем правильно.
делать проверку на нуль не нужно.
1
Модератор
Эксперт CЭксперт С++
5201 / 2918 / 1509
Регистрация: 14.12.2018
Сообщений: 5,260
Записей в блоге: 1
26.05.2021, 22:11 8
Цитата Сообщение от hoggy Посмотреть сообщение
делать проверку на нуль не нужно.
Да. Оператор delete по его документу будет ничего не делать с указателем NULL (т.е. это всегда безопасно).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int* a()
{
    int* ar = new int[5];
    return ar;
}
int main()
{
    int* p = a();
    delete[] p;
    p = nullptr;
        
    return 0;
}
Спасибо.
0
26.05.2021, 22:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2021, 22:11
Помогаю со студенческими работами здесь

Почему выделенная внутри функции память удаляется после возврата функции? Это можно исправить?
Вот пример функции, которая выделяет память под переменную, объявленную за её пределами: void...

Удаляется string после выполнения функции
Всем привет. Я начинающий в языке C++ и поэтому прошу помощи. У меня внутри функции создается...

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

После выхода из функции, чтобы матрица не изменялась
Как сделать так, чтобы передать матрицу в функцию, в функции матрицу изменить (поменять элементы...

После выхода из функции, чтобы матрица не изменялась
Как сделать так, чтобы передать матрицу в функцию, в функции матрицу изменить (поменять элементы...

Не сохраняются значения в классе после выхода из функции
Пожалуйста объясните что как и напишите работающий код) #include &lt;iostream&gt; #include...


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

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