Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
1

Утечка памяти

16.10.2011, 23:32. Просмотров 1346. Ответов 10
Метки нет (Все метки)

Не могу понять как избежать утечки памяти в своей программе... привожу кусок в одном из мест где на мой взгляд она происходит...
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 или что-то на подобе этого...
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 23:32
Ответы с готовыми решениями:

Утечка памяти?
В Лафоре такой код: #include &lt;iostream&gt; using namespace std;...

утечка памяти
Может кто-то проверить есть ли здесь утечка памяти? Мне почему-то кажется что...

Утечка памяти?!
Джесс Либерти и Дэвид Хорват &quot;Освой самостоятельно С++ за 24 часа&quot;, вырезка из...

Утечка памяти
Взял листинг кода из книги Стивен Прата Язык программирования С++. Меня...

Утечка памяти
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;ArrayOperation.h&quot; ...

10
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.10.2011, 23:33 2
Abbat_90, 12-ая строка никогда не выполнится.
0
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
16.10.2011, 23:39  [ТС] 3
так вот как этого избежать???
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.10.2011, 23:46 4
Abbat_90, не выделять память динамически.
0
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
16.10.2011, 23:51  [ТС] 5
а если хочется???
0
alkagolik
Заблокирован
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;
}
0
silentnuke
Android Programmer
139 / 140 / 10
Регистрация: 08.12.2010
Сообщений: 421
17.10.2011, 00:13 7
как вариант, используйте умные указатели=)
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
17.10.2011, 04:28 8
Цитата Сообщение от Abbat_90
Не могу понять как избежать утечки памяти в своей программе
если выделяешь память, нельзя терять указатель
C++
1
return N;
тип возвращаемого значения меняется на Array *
0
Евгений М.
1053 / 990 / 101
Регистрация: 28.02.2010
Сообщений: 2,876
Завершенные тесты: 2
17.10.2011, 13:35 9
Abbat_90, если метод не статический, то поставьте delete в деструктор.

Добавлено через 2 минуты
Хотя неправильно сказал. Сработает, если только 1 раз вызвать функцию Add.
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.10.2011, 13:41 10
Цитата Сообщение от Abbat_90 Посмотреть сообщение
а если хочется???
В Вашем примере нет смысла в динамической памяти (если только показать утечку). Количество объектов известно на стадии компиляции - он один. Объект из метода возвращается по значению, а не указатель. Память выделяется и удаляется в одном месте.
"Хочется" - это не достаточный аргумент, чтобы использовать new.
0
silentnuke
Android Programmer
139 / 140 / 10
Регистрация: 08.12.2010
Сообщений: 421
17.10.2011, 16:15 11
Цитата Сообщение от Евгений М. Посмотреть сообщение
Abbat_90, если метод не статический, то поставьте delete в деструктор.

Добавлено через 2 минуты
Хотя неправильно сказал. Сработает, если только 1 раз вызвать функцию Add.
причем здесь деструктор, если это не член класса?
он не имеет указателя на эту память.
0
17.10.2011, 16:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2011, 16:15

Утечка памяти в
Кто подскажет плиз. Тут у меня утечка памяти foreach (var file in xpsFiles)...

Утечка памяти
Либо я себе мозг запудрила, либо помогите мне :) есть у меня вектор...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru