Это не та проблема кода, /analyze
(ака PREfast) предназначен для обнаружения. Существуют и другие распространенные инструменты для обнаружения прямых утечек памяти, таких как CRT Debug Heap - см. MSDN. Возможно, вы должны использовать функциональность C++ 11, такую как std::unique_ptr
, и не всегда есть, чтобы не забудьте позвонить delete
.
#include <memory>
int main()
{
int a, b; //found unused variable
std::cout << "Hello world!";
std::cin >> a;
auto i = std::make_unique<int>()
}
Что /analyze
предназначено сделать, это предоставить некоторые из «дополнительных предупреждений» вы получаете от продуктов, таким как пуха, но главным образом сделать проверку между процедурным размером буфера с помощью SAL аннотации.
Это своего рода ошибка находит:
void someFunction(char *buffer, size_t len)
{
...
}
void otherFunction()
{
char buff[128];
someFunction(buff, 256);
}
При добавлении необходимого SAL, которая передает отношения между указателем и размером:
void someFunction(_Out_writes_(len) char *buffer, size_t len)
цепями Это предположения, которые получают нарушаются и приводят к переполнению буфера, очень трудно найти, а не столько утечек памяти.
Другой полезной функцией /analyze
является проверка аргументов PRINTF переменной длины vs. формат строки:
void printf_debug(_In_z_ _Printf_format_string_ const char* format, ...)
{
...
}
void otherFunction()
{
unsigned long l;
std::wstring str;
std::string str2;
...
printf_debug("%i %s %d", i, str.c_str(), str2.c_str());
}
VS 2015 и VS 2017 теперь включает несколько предупреждений, которые раньше были только в /analyze
в VS 2013 или ранее, как теневые переменные и базовая проверка печати (если вы пишете свои собственные функции стиля printf, вы все равно должны использовать /analyze
с _Printf_format_string_
). /analyze
продолжает предоставлять анализ буфера на основе SAL, который не является частью стандартного компилятора.
/analyze
технология PREFast может обнаружить потенциальные утечки памяти в некоторых случаях (в частности, с обеспечением безопасности исключений C++), разыменования потенциально нулевых указателей, используя неинициализированный память и т.д. Она также имеет много дополнительных правил для работы с ядром -модулирование кодирования и записи драйверов, особенно отслеживание блокировок, уровни IRQL и т. д.
Prefast And SAL Annotations
Для C#, /analyze
является FXCop инструментом, который является инструментом анализа кода плюс «стиль силовик» для .NET.
неиспользуемые переменные довольно просты в поиске, но более глубокий анализ кода на кодекс - это нечто иное. Хотя версия Visual Studio версии 2013 отнюдь не старая, если она является бесплатной версией, которую вы используете, я подозреваю, что, возможно, вы не видите более сложные возможности компилятора. Я помню в visual studio 2008 express, который был бесплатным, что он не мог полностью оптимизировать; вам пришлось заплатить за полную/профессиональную версию визуальной студии для этих возможностей компилятора. – ron
Microsoft любит бросать возможности своих продуктов, но они не позволяют легко понять и найти информацию обо всех различных версиях, а также то, что есть или не доступно в каждом ... например, VS2015-сообщество против профессионального и корпоративного. – ron
@ron Спасибо за повтор, Да, я думаю, что это причина, я загрузил бесплатную версию и использовал ее. – NDestiny