Это не касается вашего вопроса напрямую, но я чувствовал себя вынужденным ответить. Как вы говорите, инструменты, подобные функциям проверки CRT, дают вам небольшой уровень уверенности и не адресуют утечки ресурсов, кроме памяти. Если вы окажетесь в зависимости от таких инструментов, я бы сказал, что есть что-то очень, очень неправильное в вашем подходе к разработке на C++. За последние 10 лет у меня не было одной проблемы с моим кодом, связанным с утечкой памяти. Это не потому, что я - бог кодирования на C++, а потому, что я использую в своем коде основные инструменты RAII, интеллектуальных указателей и стандартных коллекций библиотек и, где возможно, избегаю явного распределения динамической памяти с помощью new
. Всякий раз, когда вы оказываетесь пишете строку кода, как:
Something * p = new Something;
стопе, и спросите себя: «Есть ли какой-нибудь способ, которым я мог бы избежать этого?» и если ответ «нет», тогда спросите себя, почему вы выделяете память необработанному указателю, и если вы не можете найти какой-либо путь вокруг этого (что очень редко бывает так, немедленно напишите код для управления указателями деблокирование и убедитесь, что этот код не является безопасным.
Если вы примете такой подход, вам не понадобятся инструменты, такие как специальные функции CRT или Valgrind, и вы сможете сэкономить океаны времени при отладке.
В идеальном мире можно было бы быть чистым C++ программиста, где все структуры в программе были выполнимыми с C++ идиомы , В моем мире я переношу 10-летнюю кодовую базу Windows на Mac, написанную на ... хорошо. сочетание C, C + (странное подмножество C++, созданное людьми, которые изучили C++ после C и пишут, что по существу является C-кодом, но с некоторыми классами), C++, что все должны взаимодействовать с динамическими библиотеками lls, которые экспортируют функциональность, экспортируя C функций, C-функций, создающих интерфейсы, или просто путем экспорта классов C++. весело. –
Это смехотворное заявление. Я был разработчиком в Microsoft, а _CrtCheckMemory() используется довольно широко. Основываясь на этом заявлении, я думаю, что мы сделали все неправильно в Microsoft. Проверка целостности кучи и стека помогает найти переполнение буфера, проблемы с присвоением указателей, ошибки, которые генерирует компилятор, ... Используйте Valgrind на linux или сверните свой собственный инструмент, который перехватывает выделение и выполняет вашу собственную проверку с некоторыми вид магического числа начала и конца распределения. – Byron