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

Утечка памяти в программе

02.04.2015, 00:10. Показов 1704. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу понять, почему идет утечка памяти. Вот :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Dumping objects ->
c:\users\дом\onedrive\яп\indivzadanie3\indivzadanie3\func.cpp(124) : {1461} normal block at 0x0125D070, 16 bytes long.
 Data: <                > 01 00 00 00 01 00 00 00 02 00 00 00 01 00 00 00 
c:\users\дом\onedrive\яп\indivzadanie3\indivzadanie3\func.cpp(33) : {1436} normal block at 0x0125CC88, 16 bytes long.
 Data: <        эяяя    > 05 00 00 00 06 00 00 00 FD FF FF FF 07 00 00 00 
c:\users\дом\onedrive\яп\indivzadanie3\indivzadanie3\func.cpp(33) : {1435} normal block at 0x0125CC38, 16 bytes long.
 Data: <юяяя        ъяяя> FE FF FF FF 03 00 00 00 04 00 00 00 FA FF FF FF 
c:\users\дом\onedrive\яп\indivzadanie3\indivzadanie3\func.cpp(33) : {1434} normal block at 0x0125CBE8, 16 bytes long.
 Data: <    ьяяяыяяя    > 03 00 00 00 FC FF FF FF FB FF FF FF 05 00 00 00 
c:\users\дом\onedrive\яп\indivzadanie3\indivzadanie3\func.cpp(31) : {1433} normal block at 0x0125E080, 12 bytes long.
 Data: <иЛ% 8М%  М% > E8 CB 25 01 38 CC 25 01 88 CC 25 01 
Object dump complete.
Detected memory leaks!
Dumping objects ->
c:\users\дом\onedrive\яп\indivzadanie3\indivzadanie3\func.cpp(33) : {1436} normal block at 0x0125CC88, 16 bytes long.
 Data: <        эяяя    > 05 00 00 00 06 00 00 00 FD FF FF FF 07 00 00 00 
c:\users\дом\onedrive\яп\indivzadanie3\indivzadanie3\func.cpp(33) : {1435} normal block at 0x0125CC38, 16 bytes long.
 Data: <юяяя        ъяяя> FE FF FF FF 03 00 00 00 04 00 00 00 FA FF FF FF 
c:\users\дом\onedrive\яп\indivzadanie3\indivzadanie3\func.cpp(33) : {1434} normal block at 0x0125CBE8, 16 bytes long.
 Data: <    ьяяяыяяя    > 03 00 00 00 FC FF FF FF FB FF FF FF 05 00 00 00 
Object dump complete.
Это func.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
//Чтение из файла
void readFromText( const char *fname, int **&a, int &m, int &n );
 
//Функция вывода для вектора и матрицы
void vectOut( int *a, int n );
 
void printMatrix( const int **a, int m, int n );
 
//Решение задачи
void task_1( int **&a, int &m, int &n, int *&temp );
 
//Основная функция для работы с заданием
void main_task_1( const char *fname );
Это func.cpp
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include "func.h"
 
//Чтение из файла
void readFromText( const char* fname, int **&a, int &m, int &n )
{
    ifstream fin( fname );
 
    if ( !fin.is_open() )
        cout << "Не найден указанный файл";
    else
        if ( !( fin >> m ) || !( fin >> n ) )
            cout << "Неверный формат входного файла";
        else
        {
            cout << "m=" << m;
            cout << "\nn=" << n;
            a = new int*[m]; //Здесь утечка
            for ( int i = 0; i < m; ++i )
                a[i] = new int[n]; //Здесь утечка
            for ( int i = 0; i < m; ++i )
                for ( int j = 0; j < n; ++j )
                    fin >> a[i][j];
        }
    fin.close();
}
//Функция вывода для вектора и матрицы
void vectOut( int *a, int n )
{
    for ( int i = 0; i < n; ++i )
        cout << setw( 4 ) << setprecision( 2 ) << a[i];
}
 
void printMatrix( int **a, int m, int n )
{
    for ( int i = 0; i < m; ++i )
    {
        for ( int j = 0; j < n; ++j )
            cout << setw( 4 ) << setprecision( 2 ) << a[i][j];
        cout << "\n";
    }
 
}
 
//Решение задачи
void task_1( int **&a, int &m, int &n, int *&temp )
{
    for ( int i = 0; i < n; ++i )
        temp[i] = 0;
    for ( int j = 0; j < n; ++j )
        for ( int i = 0; i < m; ++i )
            if ( a[i][j] < 0 )
                temp[j]++;
}
 
 
//Основная функция задания
void main_task_1( const char *fname )
{
    int **a = nullptr;
    int *temp = nullptr;
    int n = 0, m = 0;
    readFromText( fname, a, m, n );
    temp = new int[n]; //Здесь утечка
    cout << "\nМатрица:\n";
    printMatrix( a, m, n );
    task_1( a, m, n, temp );
    delete[] a;
    vectOut( temp, n );
    delete[] temp;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2015, 00:10
Ответы с готовыми решениями:

Утечка памяти в программе
Помогите, пожалуйста, найти ошибку #include &lt;iostream&gt; using namespace std; #define PI1 #define NUM 115 #define SIZE (NUM*100) ...

Небольшая утечка памяти в программе
Ув. форумчане подскажите где в данном проекте может быть утечка памяти. Происходит медленно, но происходит. За но процесс стал кушать на...

Утечка памяти
Првиетствую, помогите пожалуйста! Делаю бота для игры в вк. Но с каждым проходом внешнего цикла память утекает на 500мб (я думаю это...

10
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
02.04.2015, 01:20
Лучший ответ Сообщение было отмечено creatiny как решение

Решение

Если память так выделялась:
C++
1
2
3
a = new int*[m]; 
for ( int i = 0; i < m; ++i )
     a[i] = new int[n];
то освобождаться она должна не так:
Цитата Сообщение от creatiny Посмотреть сообщение
delete[] a;
, а так:
C++
1
2
3
for ( int i = 0; i < m; ++i )
    delete [] a[i];
delete [] a;
1
3 / 3 / 0
Регистрация: 02.03.2015
Сообщений: 27
02.04.2015, 01:26  [ТС]
lss, сделал как и сказали. Но теперь при выводе дает ошибку: нарушение прав доступа при чтении

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
void readFromText( const char* fname, int **&a, int &m, int &n )
{
    ifstream fin( fname );
 
    if ( !fin.is_open() )
        cout << "Не найден указанный файл";
    else
        if ( !( fin >> m ) || !( fin >> n ) )
            cout << "Неверный формат входного файла";
        else
        {
            a = new int*[m];
            for ( int i = 0; i < m; ++i )
            {
                a[i] = new int[n];
                for ( int j = 0; j < n; ++j )
                    fin >> a[i][j];
 
            }  
            for ( int i = 0; i < m; ++i )
                delete[] a[i];
            delete[] a;
        }
 
    fin.close();
}
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
02.04.2015, 01:39
Содержимое файла покажи.
1
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
02.04.2015, 01:42
Вот код и результат работы. Утечек нет. В файле:
3 5
1 2 -3 4 5
21 22 -23 24 25
31 -32 33 34 -35

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <iomanip>
#include <fstream>
#include <iostream>
//#include <vld.h>
 
using namespace std;
 
//Чтение из файла
void readFromText( const char *fname, int **&a, int &m, int &n );
 
//Функция вывода для вектора и матрицы
void vectOut( int *a, int n );
 
void printMatrix( const int **a, int m, int n );
 
//Решение задачи
void task_1( int **&a, int &m, int &n, int *&temp );
 
//Основная функция для работы с заданием
void main_task_1( const char *fname );
 
 
//Чтение из файла
void readFromText( const char* fname, int **&a, int &m, int &n )
{
    ifstream fin( fname );
 
    if ( !fin.is_open() )
        cout << "Не найден указанный файл";
    else
        if ( !( fin >> m ) || !( fin >> n ) )
            cout << "Неверный формат входного файла";
        else
        {
            cout << "m=" << m;
            cout << "\nn=" << n;
            a = new int*[m]; //Здесь утечка
            for ( int i = 0; i < m; ++i )
                a[i] = new int[n]; //Здесь утечка
            for ( int i = 0; i < m; ++i )
                for ( int j = 0; j < n; ++j )
                    fin >> a[i][j];
        }
    fin.close();
}
//Функция вывода для вектора и матрицы
void vectOut( int *a, int n )
{
    for ( int i = 0; i < n; ++i )
        cout << setw( 4 ) << setprecision( 2 ) << a[i];
}
 
void printMatrix( int **a, int m, int n )
{
    for ( int i = 0; i < m; ++i )
    {
        for ( int j = 0; j < n; ++j )
            cout << setw( 4 ) << setprecision( 2 ) << a[i][j];
        cout << "\n";
    }
    cout << endl;
 
}
 
//Решение задачи
void task_1( int **&a, int &m, int &n, int *&temp )
{
    for ( int i = 0; i < n; ++i )
        temp[i] = 0;
    for ( int j = 0; j < n; ++j )
        for ( int i = 0; i < m; ++i )
            if ( a[i][j] < 0 )
                temp[j]++;
}
 
 
//Основная функция задания
void main/*_task_1*/( /*const char *fname*/ )
{
    setlocale(0, "");
    
    int **a = nullptr;
    int *temp = nullptr;
    int n = 0, m = 0;
    char* fname = "1.txt";
    readFromText( fname, a, m, n );
    temp = new int[n]; //Здесь утечка
    cout << "\nМатрица:\n";
    printMatrix( a, m, n );
    task_1( a, m, n, temp );
    //delete[] a;
    for ( int i = 0; i < m; ++i )
        delete [] a[i];
    delete [] a;
 
    vectOut( temp, n );
    delete[] temp;
 
    cout << endl;
    system("pause");
}
Миниатюры
Утечка памяти в программе  
0
3 / 3 / 0
Регистрация: 02.03.2015
Сообщений: 27
02.04.2015, 01:51  [ТС]
Содержимое:
3 4
1 2 4 -5
3 -3 3 -8
0 -1 3 -6

Проверю - отпишусь.
И спасибо за помощь.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
02.04.2015, 01:56
С твоим файлом.
Миниатюры
Утечка памяти в программе  
1
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
02.04.2015, 02:06
Цитата Сообщение от creatiny Посмотреть сообщение
сделал как и сказали
Я разве говорил делать это в readFromText()?
Делать нужно там, где у тебя (в первом коде) delete [] a сделано. После вызова task_1().
1
3 / 3 / 0
Регистрация: 02.03.2015
Сообщений: 27
03.04.2015, 18:44  [ТС]
lss, исправил. Интересный случай или как это назвать:
*Visual Leak Detector утечки не были найдены.(1.png)
*А вот (2.png)
C++
1
2
3
4
5
6
7
8
// библиотека для отслеживания операций выделения памяти
#include <crtdbg.h>
// DBG_NEW — макрос, который позволяет отслеживать
// выделение памяти оператором new.
#ifndef DBG_NEW      
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )      
#define new DBG_NEW  
#endif
С использованием
C++
1
    _CrtDumpMemoryLeaks();
показывает, что утечки есть
Миниатюры
Утечка памяти в программе   Утечка памяти в программе  
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
03.04.2015, 19:03
Цитата Сообщение от creatiny Посмотреть сообщение
показывает, что утечки есть
Не выдумывай. Вот код с проверкой с помощью _CrtDumpMemoryLeaks():
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <iostream>
#include <iomanip>
#include <fstream>
#include <iostream>
 
#include <crtdbg.h>
 
using namespace std;
 
//Чтение из файла
void readFromText( const char *fname, int **&a, int &m, int &n );
 
//Функция вывода для вектора и матрицы
void vectOut( int *a, int n );
 
void printMatrix( const int **a, int m, int n );
 
//Решение задачи
void task_1( int **&a, int &m, int &n, int *&temp );
 
//Основная функция для работы с заданием
void main_task_1( const char *fname );
 
 
//Чтение из файла
void readFromText( const char* fname, int **&a, int &m, int &n )
{
    ifstream fin( fname );
 
    if ( !fin.is_open() )
        cout << "Не найден указанный файл";
    else
        if ( !( fin >> m ) || !( fin >> n ) )
            cout << "Неверный формат входного файла";
        else
        {
            cout << "m=" << m;
            cout << "\nn=" << n;
            a = new int*[m]; //Здесь утечка
            for ( int i = 0; i < m; ++i )
                a[i] = new int[n]; //Здесь утечка
            for ( int i = 0; i < m; ++i )
                for ( int j = 0; j < n; ++j )
                    fin >> a[i][j];
        }
    fin.close();
}
//Функция вывода для вектора и матрицы
void vectOut( int *a, int n )
{
    for ( int i = 0; i < n; ++i )
        cout << setw( 4 ) << setprecision( 2 ) << a[i];
}
 
void printMatrix( int **a, int m, int n )
{
    for ( int i = 0; i < m; ++i )
    {
        for ( int j = 0; j < n; ++j )
            cout << setw( 4 ) << setprecision( 2 ) << a[i][j];
        cout << "\n";
    }
    cout << endl;
 
}
 
//Решение задачи
void task_1( int **&a, int &m, int &n, int *&temp )
{
    for ( int i = 0; i < n; ++i )
        temp[i] = 0;
    for ( int j = 0; j < n; ++j )
        for ( int i = 0; i < m; ++i )
            if ( a[i][j] < 0 )
                temp[j]++;
}
 
 
//Основная функция задания
void main/*_task_1*/( /*const char *fname*/ )
{
    setlocale(0, "");
    
    int **a = nullptr;
    int *temp = nullptr;
    int n = 0, m = 0;
    char* fname = "1.txt";
    readFromText( fname, a, m, n );
    temp = new int[n]; //Здесь утечка
    cout << "\nМатрица:\n";
    printMatrix( a, m, n );
    task_1( a, m, n, temp );
    //delete[] a;
    for ( int i = 0; i < m; ++i )
        delete [] a[i];
    delete [] a;
 
    vectOut( temp, n );
    delete[] temp;
    
    cout << endl;
 
    if (_CrtDumpMemoryLeaks())
        cout << "Leaks!" << endl;
    else
        cout << "No leaks!" << endl;
    system("pause");
}
Миниатюры
Утечка памяти в программе  
1
3 / 3 / 0
Регистрация: 02.03.2015
Сообщений: 27
03.04.2015, 19:29  [ТС]
lss, Странно. Перезапустил код свой, где писал, что _CrtDumpMemoryLeaks() пишет утечки. Теперь говорит, что всё хорошо.
Спасибо большое! Разобрался теперь наконец-то что да как.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2015, 19:29
Помогаю со студенческими работами здесь

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

утечка памяти
есть функция генерирующая массив из строк, которые могут быть составлены из символов alph. При length = даже 7 расходуется более 5гб...

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

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

Утечка памяти
Доброго времени суток. Написал оконное приложение. Столкнулся с проблемой - утекает память. Какие есть средства, чтобы определить,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru