Форум программистов, компьютерный форум CyberForum.ru

Утечка памяти - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
16.10.2011, 23:32     Утечка памяти #1
Не могу понять как избежать утечки памяти в своей программе... привожу кусок в одном из мест где на мой взгляд она происходит...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Array Array::Add(Array a, Array b)
        {
        Array *N = new Array;
 
         if (a.size>=b.size) {
        for (int i=0; i<b.size; i++) {N->mas[i]=a.mas[i]+b.mas[i]; }
                for(int i=b.size; i<a.size; i++) {N->mas[i]=a.mas[i];}
                N->size = a.size;        }
        else {for (int i=0; i<a.size; i++) {N->mas[i]=a.mas[i]+b.mas[i]; }
                for(int i=a.size; i<b.size; i++) {N->mas[i]=b.mas[i];} N->size = b.size;}
          return *N;
          delete N;
        }
В результате компилялии выдаёт предупреждение unreachable cod или что-то на подобе этого...
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 23:32     Утечка памяти
Посмотрите здесь:

Утечка памяти C++
C++ Утечка памяти
Утечка памяти?! C++
Утечка памяти C++
Утечка памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.10.2011, 23:33     Утечка памяти #2
Abbat_90, 12-ая строка никогда не выполнится.
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
16.10.2011, 23:39  [ТС]     Утечка памяти #3
так вот как этого избежать???
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.10.2011, 23:46     Утечка памяти #4
Abbat_90, не выделять память динамически.
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
16.10.2011, 23:51  [ТС]     Утечка памяти #5
а если хочется???
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
17.10.2011, 00:11     Утечка памяти #6
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
#include <stdio.h>
#include <stdlib.h>
 
int *create_some(int size)
{
    int *some;
 
    some = (int*)malloc(size * sizeof(int));
 
    return some;
}
 
void delete_some(int *some)
{
    free(some);
}
 
int main()
{
    int *x, i;
    x = create_some(10);
    for (i = 0; i < 10; ++i)
        printf("%i\n", x[i]);
    delete_some(x);
    return 0;
}
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
17.10.2011, 00:13     Утечка памяти #7
как вариант, используйте умные указатели=)
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.10.2011, 04:28     Утечка памяти #8
Цитата Сообщение от Abbat_90
Не могу понять как избежать утечки памяти в своей программе
если выделяешь память, нельзя терять указатель
C++
1
return N;
тип возвращаемого значения меняется на Array *
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
17.10.2011, 13:35     Утечка памяти #9
Abbat_90, если метод не статический, то поставьте delete в деструктор.

Добавлено через 2 минуты
Хотя неправильно сказал. Сработает, если только 1 раз вызвать функцию Add.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
17.10.2011, 13:41     Утечка памяти #10
Цитата Сообщение от Abbat_90 Посмотреть сообщение
а если хочется???
В Вашем примере нет смысла в динамической памяти (если только показать утечку). Количество объектов известно на стадии компиляции - он один. Объект из метода возвращается по значению, а не указатель. Память выделяется и удаляется в одном месте.
"Хочется" - это не достаточный аргумент, чтобы использовать new.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2011, 16:15     Утечка памяти
Еще ссылки по теме:

утечка памяти C++
C++ Утечка памяти в
Утечка памяти C++

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

Или воспользуйтесь поиском по форуму:
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
17.10.2011, 16:15     Утечка памяти #11
Цитата Сообщение от Евгений М. Посмотреть сообщение
Abbat_90, если метод не статический, то поставьте delete в деструктор.

Добавлено через 2 минуты
Хотя неправильно сказал. Сработает, если только 1 раз вызвать функцию Add.
причем здесь деструктор, если это не член класса?
он не имеет указателя на эту память.
Yandex
Объявления
17.10.2011, 16:15     Утечка памяти
Ответ Создать тему
Опции темы

Текущее время: 11:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru