Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514

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

11.03.2017, 07:06. Показов 6316. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2017, 07:06
Ответы с готовыми решениями:

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

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

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

3
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.03.2017, 07:32
Цитата Сообщение от infobos Посмотреть сообщение
Правильно ли устроен алгоритм выделения, удаление и запись ячейки памяти?
Да.
Цитата Сообщение от infobos Посмотреть сообщение
Может быть, есть более простые способы?
std::vector
1
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
11.03.2017, 10:52
infobos,
Для поиска утечек пользуюсь этим - https://msdn.microsoft.com/ru-... tx3cf.aspx
Учтите, что объекты-контейнеры деструктор для которых вызовется лишь при полном завершении программы также будут считаться утечками (как раз эти самые std :: string), поэтому не удивляйтесь.
А конкретно во время исполнения следить за каждым байтиком в VS 2015 вроде бы можно, но такого давно не делал.
1
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
11.03.2017, 15:17  [ТС]
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2017, 15:17
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru