Встроенный отладчик VS2017 и утечки памяти

203
23 февраля 2018, 18:26

Добрый день.

Пишу простой код:

int main(){
    int ret=0;
    char* ddd = new char[100];
    return ret;
}

Создаю debug проект в VS2017. Запускаю проект в отладчике. Все нормально завершается без всяких замечаний, хотя налицо утечка памяти.

Вопросы:

  1. Разве встроенный отладчик VS2017 не ловит утечки памяти? Или надо где-то в настройках включить переключатель, чтобы встроенный отладчик VS2017 начал ловить утечки памяти?

  2. Если встроенный отладчик VS2017 не ловит утечки памяти, то какой отладчик их ловит?

  3. Когда-то я работал на древнем Borland C++ Builder 6.0, так на его отладчике такие утечки памяти прекрасно ловились. А тут новейшая IDE от ведущего производителя и утечка памяти не ловится.

Спасибо.

Answer 1

У майкрософта для дампа утечек есть своя либа (https://msdn.microsoft.com/en-us/library/x98tx3cf.aspx).

По умолчанию, обычное консольное приложение вам ничего не покажет.

Чтобы увидеть утечки надо добавить пару строк:

#define _CRTDBG_MAP_ALLOC  
#include <stdlib.h>  
#include <crtdbg.h> 
int main() 
{
    int ret = 0;
    char* ddd = new char[100];
    _CrtDumpMemoryLeaks(); 
    return ret;
}

И видим ожидаемый вывод:

Detected memory leaks!
Dumping objects ->
{74} normal block at 0x03326468, 100 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.
Answer 2

Для виндовсов есть программы, которые отслеживают утечки и прочие грязные штучки, типа использования неинициализированных переменных, без необходимости помещать что-то дополнительное в код. В основном, это проприетарные изделия, но есть и более доступные и бесплатные.

Возможно, Вас заинтересует обсуждение вопроса, близкого Вашему, на stackoverflow.com

READ ALSO
Чем чревато закрытие программы через taskkill?

Чем чревато закрытие программы через taskkill?

Я хочу отловить момент, когда приложение пытаются закрыть и убить процесс своей же программы через taskkillСделать я это хочу, потому что при...

262
Проверить попадает ли точка в заданную область

Проверить попадает ли точка в заданную область

Есть 2 действительных числа, x и y, которые вводятся с клавиатурыНужно проверить попадет ли точка в заданную область, область это рисунок

199
Правый клик на неактивную вкладку

Правый клик на неактивную вкладку

Почему для табов, которые активны (2 и 3), пкм срабатывает, а для 4, который неактивен - не срабатывает? Надо mouseevent'ы включить для него?

236
QString как сравнить с LineEdit

QString как сравнить с LineEdit

Как сравнить написано в LineEdit с каким-нибудь QString и вывести true/false

219