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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
#1

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

16.10.2011, 23:32. Просмотров 1261. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Утечка памяти (C++):

Утечка памяти - C++
Господа подскажите как узнать какая п̶а̶д̶л̶а̶ переменная жрет память? Или как посмотреть сколько вообще переменных и объектов находятся в...

Утечка памяти - C++
Доброго времени суток, форумчане. Помогите справиться с утечкой памяти, не понятно где зараза засела. Это класс представления числа в СОК...

Утечка памяти - C++
Помогите с кодом, вот написал реализацию стека по заданию. Преподаватель попросил проверить, верно ли я использую delete, ибо mas в классе...

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

Утечка памяти - C++
Доброго времени суток! Столкнулся с проблемой утечки памяти! Будь у меня маленькая программка, выловил бы легко, но в 2000 строк кода все...

Утечка памяти - C++
Либо я себе мозг запудрила, либо помогите мне :) есть у меня вектор vector&lt;char*&gt; names_variable; дополняю его таким образом ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 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
Эксперт С++
4936 / 2516 / 180
Регистрация: 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 / 5
Регистрация: 08.12.2010
Сообщений: 421
17.10.2011, 00:13 #7
как вариант, используйте умные указатели=)
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.10.2011, 04:28 #8
Цитата Сообщение от Abbat_90
Не могу понять как избежать утечки памяти в своей программе
если выделяешь память, нельзя терять указатель
C++
1
return N;
тип возвращаемого значения меняется на Array *
0
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
17.10.2011, 13:35 #9
Abbat_90, если метод не статический, то поставьте delete в деструктор.

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

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

Утечка памяти - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;ArrayOperation.h&quot; using namespace std; int main() { int...

Утечка памяти - C++
Здравствуйте. Есть программа (разбитая на функции) постоянно работающая в цикле и выводящая информацию на консоль. И получается что она...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.10.2011, 16:15
Ответ Создать тему
Опции темы

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