Анализ кода для предупреждений C/C++
Обновлен: Ноябрь 2007
В этом разделе перечислены предупреждения анализа кода C/C++ от C6000 до C6999.
В этом подразделе
Номер предупреждения |
Описание |
---|---|
Предупреждение C6001: использование неинициализированной памяти <переменная> |
|
Предупреждение C6011: разыменование указателя NULL <имя> |
|
Предупреждение C6029: возможно переполнение буфера в вызове <функция>: используется непроверенное значение. |
|
Предупреждение C6031: возвращаемое значение пропущено: <функция> может вернуть непредусмотренное значение |
|
Предупреждение C6053: вызов <функция> может не окончить нулем строку <переменная> |
|
Предупреждение C6054: строка <переменная> может не оканчиваться нулем |
|
Предупреждение C6057: переполнение буфера из-за несоответствия знаков или числа байт в вызове <функция> |
|
Предупреждение C6059: неверный параметр длины в вызове <функция>. Требуется количество оставшихся знаков, а не размер буфера <переменная> |
|
Предупреждение C6063: отсутствует строковый аргумент для <функции>, соответствующий описателю преобразования <номер> |
|
Предупреждение C6064: отсутствует целочисленный аргумент для <функции>, соответствующий описателю преобразования <номер> |
|
Предупреждение C6066: элемент, не являющийся указателем, передан как параметр <число>, когда в вызове <функция> требуется параметр |
|
Предупреждение C6067: параметр <номер> в вызове <функция> должен быть адресом строки. |
|
Предупреждение C6200: индекс <имя> находится вне допустимого диапазона индекса от <минимум> до <максимум> для бесстекового буфера <переменная> |
|
Предупреждение C6201: переполнение буфера для <переменной>, которой, возможно, выделен стек: индекс <имя> находится вне допустимого диапазона индекса от <минимум> до <максимум>. |
|
Предупреждение C6202: переполнение буфера для <переменной>, которой, возможно, выделен стек, в вызове <функции>: длина <размер> превышает размер буфера <максимум>. |
|
Предупреждение C6203: переполнение буфера для буфера <переменная> в вызове <функции>: длина <размер> превышает размер буфера. |
|
Предупреждение C6204: возможно переполнение буфера в вызове <функции>: используется непроверенный параметр <переменная>. |
|
Предупреждение C6209: используется "sizeof<variable1>" в качестве параметра <номер> в вызове <функции>, где <variable2> может быть массивом широких символов. Предполагалось использовать счетчик символов вместо счетчика байтов? |
|
Предупреждение C6211: утечка памяти <указатель> из-за исключения. Попробуйте использовать локальный блок catch для очистки памяти. |
|
Предупреждение C6214: приведение между семантически различными целочисленными типами: HRESULT к логическому типу. |
|
Предупреждение C6215: приведение между семантически различными целочисленными типами: логический тип к HRESULT. |
|
Предупреждение C6216: вставленное компилятором приведение между семантически различными целыми типами: логический тип к HRESULT |
|
Предупреждение C6217: неявное приведение между семантически различными целочисленными типами: проверка HRESULT с "not". Попробуйте вместо этого использовать макрос SUCCEEDED или FAILED. |
|
Предупреждение C6219: неявное приведение между семантически различными целочисленными типами: сравнение HRESULT с 1 или TRUE. Попробуйте вместо этого использовать макрос SUCCEEDED или FAILED. |
|
Предупреждение C6220: неявное приведение между семантически различными целочисленными типами: сравнение HRESULT с -1. Попробуйте вместо этого использовать макрос SUCCEEDED или FAILED. |
|
Предупреждение C6221: неявное приведение между семантически различными целочисленными типами: сравнение HRESULT с целым числом. Попробуйте вместо этого использовать макрос SUCCEEDED или FAILED. |
|
Предупреждение C6225: неявное приведение между семантически различными целочисленными типами: присвоение HRESULT значения 1 или TRUE. Попробуйте вместо этого использовать S_FALSE. |
|
Предупреждение C6226: неявное приведение между семантически различными целочисленными типами: присвоение HRESULT значения -1. Попробуйте вместо этого использовать E_FAIL. |
|
Предупреждение C6230: неявное приведение между семантически различными целочисленными типами: использование HRESULT в логическом контексте. |
|
Предупреждение C6235: (<ненулевая константа> || <выражение>) всегда является ненулевой константой. |
|
Предупреждение C6236: (<выражение> || <ненулевая константа> ) всегда является ненулевой константой. |
|
Предупреждение C6237: (<нуль> && <выражение>) всегда равно нулю. При этом <выражение> не вычисляется и может создавать побочные эффекты.. |
|
Предупреждение C6239: (<ненулевая константа> && <выражение>) всегда равно результату <выражения>. Предполагалось использовать оператор побитового И? |
|
Предупреждение C6240: (<выражение> && <ненулевая константа>) всегда равно результату <выражения>. Предполагалось использовать оператор побитового И? |
|
Предупреждение C6242: выход за пределы данного блока try вызывает локальную очистку. При этом значительно снижается производительность. |
|
Примечание C6244: локальное объявление <переменной> скрывает предыдущее объявление в строке <строка> файла <файл>. |
|
Примечание C6246: локальное объявление <переменной> скрывает объявление такого же имени во внешней области. Дополнительные сведения: см. предыдущее объявление в <расположении>. |
|
Предупреждение C6248: установка значения NULL для DACL для SECURITY_DESCRIPTOR приведет к наличию незащищенного объекта. |
|
Предупреждение C6250: вызов <функции> VirtualFree без флага MEM_RELEASE может привести к высвобождению памяти, но не дескрипторов адресов (VAD); в результате будет утечка адресного пространства. |
|
Предупреждение C6255: _alloca указывает наличие сбоя путем создания ошибки переполнения стека. Попробуйте вместо этого использовать _alloca_s. |
|
Предупреждение C6258: использование TerminateThread не обеспечивает очистки потока. |
|
Предупреждение C6259: код с подписью недоступен: (<выражение> & <константа>) в switch-expr не может иметь значение <метка case>. |
|
Конструкция sizeof * sizeof обычно является ошибкой. Вы хотели использовать количество символов или количество байтов? |
|
Предупреждение C6262: функция использует <константа> байт стека, что превышает /analyze:stacksize<константа>. Попробуйте переместить какие-либо данные в кучу. |
|
Предупреждение C6263: использование _alloca в цикле может привести к быстрому переполнению стека. |
|
Предупреждение C6268: неверный порядок операций: (<ТИП1>)(<ТИП2>)x + y. Возможно, отсутствуют скобки в (<ТИП1>)((<ТИП2>)x + y) |
|
Предупреждение C6269: возможен неверный порядок операций: пропущено разыменование. |
|
Предупреждение C6270: отсутствует аргумент с плавающей запятой в <функции>: добавьте аргумент с плавающей запятой, соответствующий определителю преобразования <номер>. |
|
Предупреждение C6271: лишний аргумент передан <функции>: параметр <номер> не используется строкой формата. |
|
Предупреждение C6272: передан параметр <номер>, не являющийся аргументом с плавающей запятой, тогда как в вызове <функции> требуется аргумент с плавающей запятой. |
|
Предупреждение 6273: передан параметр <номер>, не являющийся целочисленным, тогда как в вызове <функции> требуется целочисленный аргумент. Если передается значение указателя, нужно использовать %p. |
|
Предупреждение C6274: передан параметр <номер>, не являющийся знаком, тогда как в вызове <функции> требуется знак. |
|
Предупреждение C6276: приведение между семантически различными строковыми типами: char* к wchar_t*. Использование неверной строки может привести к непредвиденному поведению. |
|
Предупреждение C6277: имя приложения NULL с путем без кавычек в вызове <функции>. Возникает уязвимость безопасности, если путь содержит пробелы. |
|
Предупреждение C6278: <переменная> выделяется с массивом new [], но удаляется скалярной операцией delete. Деструкторы не будут вызваны. |
|
Предупреждение C6279: <переменная> выделяется скалярной операцией new, удаляется операцией массива delete []. |
|
Предупреждение C6280: <переменная> выделяется <функцией>, но удаляется <функцией>. |
|
Предупреждение 6281 — неверный порядок операций: операторы отношения имеют более высокий приоритет, чем побитовые операторы |
|
Предупреждение C6282: неверный оператор: присвоение константы в логическом контексте. Рассмотрите возможность использования "==". |
|
Предупреждение C6283: <переменная> выделяется с массивом new [], но удаляется скалярной операцией delete. |
|
Предупреждение C6284: объект передан как параметр "%d", тогда как в вызове <функции> требуется строка. |
|
Предупреждение C6285: (<ненулевая константа> || <ненулевая константа>) всегда является ненулевой константой. Предполагалось использовать оператор побитового И? |
|
Предупреждение C6286: (ненулевая константа> || <выражение>) всегда является ненулевой константой. При этом <выражение> не вычисляется и может создавать побочные эффекты |
|
Предупреждение C6287: избыточный код: правое и левое подчиненные выражения идентичны. |
|
Предупреждение C6288: неверный оператор. Взаимное исключение && всегда равно нулю. Предполагалось использовать "||"? |
|
Предупреждение C6289: неверный оператор. Взаимное исключение || всегда дает ненулевую константу. Предполагалось использовать "&&"? |
|
Предупреждение C6290: побитовая операция над логическим результатом. "!" имеет более высокий приоритет, чем "&". Используйте "&&" или "(!(x & y))". |
|
Предупреждение C6291: побитовая операция над логическим результатом. "!" имеет более высокий приоритет, чем "|". Используйте "||" или "(!(x | y))". |
|
Предупреждение C6292: неправильно определен цикл for. Счетчик увеличивается с максимального значения. |
|
Предупреждение C6293: неправильно определен цикл for. Счетчик уменьшается с минимального значения. |
|
Предупреждение C6294: неправильно определен цикл for. Начальное условие не проходит проверку. Основная часть цикла не выполняется. |
|
Предупреждение C6295: неправильно определен цикл for. Значения <переменной> находится в диапазоне от минимального до максимального. Цикл выполняется бесконечно. |
|
Предупреждение C6296: неправильно определен цикл for. Основная часть цикла выполняется только один раз. |
|
Предупреждение C6297: арифметическое переполнение. 32-разрядное значение сдвигается, а затем приводится к 64-разрядному значению. Результат может оказаться непредвиденным значением. |
|
Предупреждение C6298: доступная только для чтения строка <указатель> используется в качестве доступного для записи строкового аргумента. Попытка записи в статическую память, доступную только для чтения, может привести к произвольным сбоям. |
|
Предупреждение C6299: явное сравнение битового поля с логическим типам приведет к непредвиденным результатам. |
|
Предупреждение C6299: явное сравнение битового поля с логическим типам приведет к непредвиденным результатам. |
|
Предупреждение C6303: несоответствие строки формата. Передан параметр <номер>, являющийся широким символом, тогда как в вызове <функции> требуется символьная строка. |
|
Предупреждение C6305: возможное несоответствие sizeof и countof. |
|
Предупреждение C6306: неверный вызов <функции>: попробуйте использовать <функцию>, принимающую va_list в качестве аргумента. |
|
Предупреждение C6308: "realloc" может вернуть нулевой указатель. Присвоение нулевого указателя <переменной>, которая передается в качестве аргумента для "realloc", приведет к утечки в исходном блоке памяти. |
|
Предупреждение C6309: аргумент <номер> имеет нулевое значение, он не соответствует спецификации функции <функция>. |
|
Предупреждение C6310: недопустимая константа в фильтре выражения может привести к непредвиденному поведению. |
|
Предупреждение C6312: возможно образование бесконечного цикла. Использование константы EXCEPTION_CONTINUE_EXECUTION в выражении exception-filter внутри try-except. |
|
Предупреждение C6313: неверный оператор. Флаг с нулевым значением нельзя проверить с помощью побитового И. Используйте проверку равенства для флагов с нулевыми значениями. |
|
Предупреждение C6314: неверный порядок операций. Побитовое ИЛИ имеет более высокий приоритет, чем условный оператор. Добавьте скобки для уточнения. |
|
Предупреждение C6315: неверный порядок операций. Побитовое И имеет более высокий приоритет, чем побитовое ИЛИ. Добавьте скобки для уточнения. |
|
Предупреждение C6316: неверный оператор. Проверенное выражение является константой и отлично от нуля. Для определения установки разрядов используйте побитовое И. |
|
Предупреждение C6317: неверный оператор. Логическое отрицание (!) не является взаимозаменяемым с дополнением до единицы (~). |
|
Предупреждение C6318: неверное определение __try/__except. Использование EXCEPTION_CONTINUE_SEARCH или другой константы с нулевым результатом в выражении фильтра исключений. Код в блоке обработки исключений не выполняется. |
|
Предупреждение C6319: использование оператора-запятой в выражении приводит к тому, что левый аргумент будет пропущен, если он не имеет побочных эффектов. |
|
Предупреждение C6320: выражение фильтра исключений является константой EXCEPTION_EXECUTE_HANDLER. При этом могут быть показаны исключения, которые не предполагалось обрабатывать. |
|
Предупреждение C6322: пустой блок _except. |
|
Предупреждение 6323: использование арифметического оператора для логического типа. |
|
Предупреждение C6324: возможно неверное использование <функции1>. Предполагалось использовать <функцию2>? |
|
Предупреждение C6326: возможное сравнение константы с другой константой. |
|
Предупреждение C6327: потенциальное переполнение буфера. SysAllocStringLen копирует <количество> знаков из строки <переменная> без проверки числа копируемых знаков. Возможен сбой кода. |
|
Предупреждение C6328: <тип> передается как параметр <номер>, когда <тип> требуется в вызове <функции>. |
|
Предупреждение C6331: недопустимый параметр. Совместная передача MEM_RELEASE и MEM_DECOMMIT для <функции> запрещена. В результате возникает сбой этого вызова. |
|
Предупреждение C6332: недопустимый параметр. Передача нуля в качестве параметра dwFreeType для <функции> запрещена. В результате возникает сбой вызова. |
|
Предупреждение C6333: недопустимый параметр. Передача MEM_RELEASE и ненулевого параметра dwSize функции <функция> запрещена. В результате возникает сбой вызова. |
|
Предупреждение C6334: оператор sizeof применяется к выражению с оператором. Это может вызвать непредвиденные результаты. |
|
Предупреждение C6335: утечка в обработчике данных <имя обработчика>. |
|
Предупреждение C6336: арифметический оператор имеет более высокий приоритет, чем оператор вопроса, используйте скобки для уточнения. |
|
Предупреждение C6381: для завершения работы <функции> API требуется допустимый dwReason или lpMessage. |
|
Предупреждение C6383: переполнение буфера из-за преобразования счетчика элементов в счетчик байтов. Для параметра <номер> в вызове <функции> требуется счетчик элементов. |
|
Предупреждение C6384: деление параметра sizeof указателя на другое значение. |
|
Предупреждение C6385: недопустимые данные. При доступе к <имя буфера> считываемый размер равен <размер1> байт, но можно прочесть <размер2> байт: строки x, y. |
|
Предупреждение C6386: переполнение буфера. Доступ к <имя буфера>, записываемый размер <размер1> байт, но можно записать <размер2> байт: строки x, y. |
|
Предупреждение C6387: <аргумент> может иметь значение <значение>. Это противоречит спецификации функции <имя функции>, строки x, y. |
|
Предупреждение C6388: <аргумент> не может иметь значение <значение>, так как это противоречит спецификации функции <имя функции>, строки x, y. |
|
Предупреждение C6400: использование <имя функции> для сравнения со строкой константы <имя строки> без учета регистра. При применении для языков, отличных от английского, могут возникнуть непредвиденные результаты. |
|
Предупреждение C6401: использование <имя функции> на языке по умолчанию для сравнения без учета регистра со строкой константы <имя строки>. При применении для языков, отличных от английского, могут возникнуть непредвиденные результаты. |
|
Предупреждение C6500: недопустимая аннотация: недопустимое значение свойства <имя>. |
|
Предупреждение C6503: конфликт аннотаций. Свойство <имя> конфликтует с ранее указанным свойством. |
|
Предупреждение C6503: конфликт аннотаций. Ссылки нельзя помечать как Null=Yes и Null=Maybe. |
|
Предупреждение C6504: недопустимая аннотация. Указатель можно использовать только для значений типа указателя, указателя на член и массива. |
|
Предупреждение C6505: недопустимая аннотация. Свойство MustCheck нельзя использовать для значений типа void. |
|
Предупреждение C6506: недопустимая аннотация. Свойство <имя> можно использовать только для значений типа указатель или массив. |
|
Предупреждение C6507: конфликт аннотации. Свойство Null с Deref=0 в условии Post должно быть подмножеством свойства Null в условии Pre. |
|
Предупреждение C6508: недопустимая аннотация. Доступ на запись запрещен для значений констант. |
|
Предупреждение C6509: недопустимая аннотация. Нельзя ссылаться на "return" из предварительного условия. |
|
Предупреждение C6506: недопустимая аннотация. Свойство NullTerminated можно использовать только для значений типа указателя или массива. |
|
Предупреждение C6511: недопустимая аннотация. Свойство MustCheck должно иметь значение Yes или No. |
|
Предупреждение C6512: недопустимая аннотация. Свойство Null должно иметь значение Maybe, если свойство Valid имеет значение No. |
|
Предупреждение C6513: недопустимая аннотация. Для ElementSizeConst требуются дополнительные свойства размера. |
|
Предупреждение C6514: недопустимая аннотация. Значение свойства <имя> превышает размер массива. |
|
Предупреждение C6515: недопустимая аннотация. Свойство <имя> можно использовать только для значений типа указателей. |
|
Предупреждение C6516: недопустимая аннотация. Для атрибута <имя> не указаны свойства. |
|
Предупреждение C6517: конфликт аннотаций. Невозможно указать ValidElementsConst и ValidBytesConst для нечитаемых буферов. |
|
Предупреждение C6518: конфликт аннотаций. Невозможно указать WriteableElementsConst и WriteableBytesConst для незаписываемых буферов. |
|
Предупреждение C6521: указан недопустимый размер. Оператор * можно использовать только типов указателей. |
|
Предупреждение C6522: неверно указан размер. Требуется выражение целого типа. |
|
Предупреждение C6523: неверно указан размер. Параметр <имя> не найден. |
|
Предупреждение C6525: неверно указан размер. Значение свойства может быть недопустимым. |
|
Предупреждение C6526: неверно указан размер. Требуется выражение типа указателя или массива. |
|
Предупреждение 6530: не распознан стиль строки формата <имя>. |
|
Предупреждение C6535: буфер не может иметь размер <n>, превышающий размер max(size_t). |
См. также
Основные понятия
Рекомендации по написанию безопасного кода