Извините за плохой заголовок, но мне просто интересно, что именно происходит с утечкой памяти, соответственно, как я действительно могу сказать, что я сделал некоторые плохие вещи в своей программе.Понимание вывода обнаружения утечки памяти Microsoft
Я запустить Memory Leak Test в Visual Studio (_CrtDumpMemoryLeaks()) и выводит огромный список обнаруженных утечек (только показывая небольшую часть):
{1640} normal block at 0x081C2AB0, 4 bytes long.
Data: <; > 3B 00 00 00
{789} normal block at 0x08B792E8, 12 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00
{788} normal block at 0x027E62D8, 32 bytes long.
Data: < L L > 20 A8 FE 07 A0 A0 17 08 E4 4C F3 07 D8 4C F3 07
{787} normal block at 0x027E6328, 32 bytes long.
Data: <layer03 - Object> 6C 61 79 65 72 30 33 20 2D 20 4F 62 6A 65 63 74
{786} normal block at 0x08B79748, 8 bytes long.
Data: <`N > 60 4E F3 07 00 00 00 00
Я не могу на самом деле цифра что именно я сделал неправильно. Я следил за подсказками от another question of mine и заменил все new/delete
вещами умными указателями (или, по крайней мере, я думаю, что сделал).
Причина, по которой я спрашиваю, потому что я столкнулся с увеличением объема памяти и размера кучи во время запуска моей программы, и я не уверен, если это серьезная проблема или просто какое-то базовое поведение.
Возьмите мой (сам написанный) графический интерфейс, например:
std::shared_ptr<Gui_Button> gui_modal_window_map_saved_button;
И теперь я называю его:
gui_modal_window_map_saved_button.reset(new Gui_Button(res_handler, "Select", 20, 345, 70, 40, BUTTON_CONFIRM));
который было сказано, чтобы быть в безопасности памяти. Теперь есть что-то, о чем я не совсем уверен - как я могу безопасно удалить кнопку сейчас? Я знаю, что нет ничего подобного удалению с помощью интеллектуальных указателей, но я думаю об удалении кнопки, когда она не нужна больше, т. Е. После закрытия соответствующего окна.
На данный момент я мою кнопку на кнопку «новый» «удаление» с reset()
if (g_ev.event_id == EVENT_CLICKED && g_ev.element == gui_modal_window_map_saved_button.get()) {
gui_modal_window_map_saved.reset();
gui_modal_window_map_saved_button.reset();
}
Я думал, что это было хорошо, но почему растет мой размер памяти (и снова не уменьшается) каждый раз создано?
Возвращаясь к первоначальному вопросу
я получаю эти дампы утечек памяти с помощью Visual Studio, но я действительно не могу понять, как использовать эту информацию. Что именно вызывает утечку памяти? Теперь я использую только «обычные» указатели, в которых мне нужно передать что-то другому классу, т. Е. И заменить все new/deletes
интеллектуальными указателями. Я действительно не могу показать свой код, потому что это около 3000 строк.
Итак, что именно вызывает утечку памяти и как я использую информацию, предоставленную VS?
Это общий вопрос? – elasticman
Утечки памяти не об оборудовании, если вы не оставите свой ноутбук под дождем ... –
Серый район. Я бы сказал, что утечка памяти - это общий вопрос. –