Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
Строитель
456 / 73 / 4
Регистрация: 18.06.2010
Сообщений: 507
1

Выделение памяти, проверка на утечку памяти

11.03.2017, 07:06. Показов 3856. Ответов 3
Метки нет (Все метки)

Интересуют два вопроса:

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

2. Как проверить удаляется ли выделение памяти в среде Visual Studio? Я про то, что коды могут быть очень большими и не всегда есть возможность посмотреть каждую переменную. Может, есть способ увидеть память программы целиком? Знаю, что можно отследить в диспетчере задач посмотрев на процесс. Но там не возможно посмотреть с точностью до байтов…

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
#include <iostream>//Библиотека ввода вывода
//Консольное приложение для теста массива указателей с выделением памяти.
 
void main()
{
    setlocale(LC_ALL, "rus");
 
    //Тест на работу строк
    std::cout << "\n";
    std::cout << "Новый тест\n";
 
    char mas[10];
    char *text;
    int adres;
 
    text="Привет";
    adres=(int)text;
 
    strcpy_s(mas, 10, "123");
 
    std::cout << text << "\n";
    std::cout << mas << "\n";
    std::cout << adres << "\n";
    printf("%X\n", adres);
 
 
 
    //Тест на массив указателей
    setlocale(LC_ALL, "rus");
 
    std::cout << "\n";
    std::cout << "Новый тест 2\n";
 
    int **masmas;
    int kol=10;
    int f,f2;
 
    masmas = new int*[kol];
    for (f=0;f<kol;f++)
    {
        masmas[f]=new int[kol];
        
        for (f2=0;f2<kol;f2++) {masmas[f][f2]=(f*10)+f2;};//Записать ячейку
    }
 
    //Показать запись
    for (f=0;f<kol;f++)
    {
        for (f2=0;f2<kol;f2++) {std::cout << masmas[f][f2] << "\n";};
    }
 
 
    for (int i=0;i<kol;i++) {delete[] masmas[i];}//Удалить вложенный массив
    delete[] masmas;//Удалить главный массив
 
 
    int s3;
    std::cin>>s3;
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2017, 07:06
Ответы с готовыми решениями:

Проверка на утечку памяти
Всем доброго времени суток. Сразу оговорюсь, я не профессионал, программирование - моё хобби,...

Распределение памяти. Динамическое выделение памяти
an-1 an-2 ... a2

Найти утечку памяти программно
Есть программа (под 700 строк) в которой есть утечка памяти в размере, с помощью чего можно...

Как отследить утечку памяти?
Как в vs(ну или в общем) отследить учтечку памяти? То есть если было выделено память под что то с...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
3
6954 / 6005 / 2726
Регистрация: 14.04.2014
Сообщений: 25,655
11.03.2017, 07:32 2
Цитата Сообщение от infobos Посмотреть сообщение
Правильно ли устроен алгоритм выделения, удаление и запись ячейки памяти?
Да.
Цитата Сообщение от infobos Посмотреть сообщение
Может быть, есть более простые способы?
std::vector
1
69 / 69 / 35
Регистрация: 06.07.2016
Сообщений: 415
11.03.2017, 10:52 3
infobos,
Для поиска утечек пользуюсь этим - https://msdn.microsoft.com/ru-... tx3cf.aspx
Учтите, что объекты-контейнеры деструктор для которых вызовется лишь при полном завершении программы также будут считаться утечками (как раз эти самые std :: string), поэтому не удивляйтесь.
А конкретно во время исполнения следить за каждым байтиком в VS 2015 вроде бы можно, но такого давно не делал.
1
Строитель
456 / 73 / 4
Регистрация: 18.06.2010
Сообщений: 507
11.03.2017, 15:17  [ТС] 4
Цитата Сообщение от Notoriously Посмотреть сообщение
Для поиска утечек пользуюсь этим - https://msdn.microsoft.com/ru-... tx3cf.aspx
Учтите, что объекты-контейнеры деструктор для которых вызовется лишь при полном завершении программы также будут считаться утечками (как раз эти самые std :: string), поэтому не удивляйтесь.
А конкретно во время исполнения следить за каждым байтиком в VS 2015 вроде бы можно, но такого давно не делал.
А можно пример кода? Чтобы в коде была утечка памяти и ее выявить с помощью библиотеки <crtdbg.h>
Интересует измерять оперативную память в коде на разных строках кода.

Добавлено через 16 минут
Спасибо! Разобрался! Работает на visual studio 2012
Вот тема: Борьба с утечками памяти
Вот мой рабочий код:
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
#include "Global.h"
 
#include <crtdbg.h>//Библиотека для утечки памяти
_CrtMemState  stady1 = {0};//Результат памяти 1
_CrtMemState  stady2 = {0};//Результат памяти 2
 
 
void main()
{
 
      _CrtMemCheckpoint( &stady1 ); //Результат памяти 1
   
 
    setlocale(LC_ALL, "rus");
 
    prrint();
 
    std::cout << "\n";
    std::cout << "Новый тест 2\n";
 
    int **masmas;
    int kol=2;
    int f,f2;
 
    masmas = new int*[kol];
    for (f=0;f<kol;f++)
    {
        masmas[f]=new int[kol];
        
        for (f2=0;f2<kol;f2++) {masmas[f][f2]=(f*kol)+f2;};//Записать ячейку
    }
 
    //Показать запись
    for (f=0;f<kol;f++)
    {
        for (f2=0;f2<kol;f2++) {std::cout << masmas[f][f2] << "\n";};
    }
 
 
    for (int i=0;i<kol;i++) {delete[] masmas[i];}//Удалить вложенный массив
    delete[] masmas;//Удалить главный массив
 
    //Выявить утечку памяти
    _CrtMemCheckpoint( &stady2 );//Результат памяти 2
    _CrtMemState  result = {0};
   if( _CrtMemDifference( &result, &stady1, &stady2 ) )  {
         _CrtMemDumpStatistics( &result );
         printf("Память изменилась: %u\n", result.lTotalCount);
   }else printf("Утечки памяти нет!\n");
   //Выявить утечку памяти
 
    std::cout << "\n";
    std::cout << "Новый тест 3\n";
 
    Sum k,z;
    Sum *r;
 
    r=&z;
    r->getx(2);
 
    k.getx(2);
    k.gety(3);
 
    k.summa();
 
    int s3;
    std::cin>>s3;
 
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2017, 15:17

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Имеет ли этот код утечку памяти?
Привет, подскажите пожалуйста имеет ли этот код утечку памяти? #include &lt;iostream&gt; using...

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

Программа для проверки кода на утечку памяти.
Есть код на С++, нужно проверить течет ли память. С помощью какой программы это можно сделать?

Удаление из вектора указателей и предотвратить утечку памяти
Всем доброго времени суток!!! Помогите разобраться с удалением из вектора указателей на...


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

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

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