Поделиться через


Анализ кода для предупреждений C/C++

Обновлен: Ноябрь 2007

В этом разделе перечислены предупреждения анализа кода C/C++ от C6000 до C6999.

В этом подразделе

Номер предупреждения

Описание

C6001

Предупреждение C6001: использование неинициализированной памяти <переменная>

C6011

Предупреждение C6011: разыменование указателя NULL <имя>

C6029

Предупреждение C6029: возможно переполнение буфера в вызове <функция>: используется непроверенное значение.

C6031

Предупреждение C6031: возвращаемое значение пропущено: <функция> может вернуть непредусмотренное значение

C6053

Предупреждение C6053: вызов <функция> может не окончить нулем строку <переменная>

C6054

Предупреждение C6054: строка <переменная> может не оканчиваться нулем

C6057

Предупреждение C6057: переполнение буфера из-за несоответствия знаков или числа байт в вызове <функция>

C6059

Предупреждение C6059: неверный параметр длины в вызове <функция>. Требуется количество оставшихся знаков, а не размер буфера <переменная>

C6063

Предупреждение C6063: отсутствует строковый аргумент для <функции>, соответствующий описателю преобразования <номер>

C6064

Предупреждение C6064: отсутствует целочисленный аргумент для <функции>, соответствующий описателю преобразования <номер>

C6066

Предупреждение C6066: элемент, не являющийся указателем, передан как параметр <число>, когда в вызове <функция> требуется параметр

C6067

Предупреждение C6067: параметр <номер> в вызове <функция> должен быть адресом строки.

C6200

Предупреждение C6200: индекс <имя> находится вне допустимого диапазона индекса от <минимум> до <максимум> для бесстекового буфера <переменная>

C6201

Предупреждение C6201: переполнение буфера для <переменной>, которой, возможно, выделен стек: индекс <имя> находится вне допустимого диапазона индекса от <минимум> до <максимум>.

C6202

Предупреждение C6202: переполнение буфера для <переменной>, которой, возможно, выделен стек, в вызове <функции>: длина <размер> превышает размер буфера <максимум>.

C6203

Предупреждение C6203: переполнение буфера для буфера <переменная> в вызове <функции>: длина <размер> превышает размер буфера.

C6204

Предупреждение C6204: возможно переполнение буфера в вызове <функции>: используется непроверенный параметр <переменная>.

C6209

Предупреждение C6209: используется "sizeof<variable1>" в качестве параметра <номер> в вызове <функции>, где <variable2> может быть массивом широких символов. Предполагалось использовать счетчик символов вместо счетчика байтов?

C6211

Предупреждение C6211: утечка памяти <указатель> из-за исключения. Попробуйте использовать локальный блок catch для очистки памяти.

C6214

Предупреждение C6214: приведение между семантически различными целочисленными типами: HRESULT к логическому типу.

C6215

Предупреждение C6215: приведение между семантически различными целочисленными типами: логический тип к HRESULT.

C6216

Предупреждение C6216: вставленное компилятором приведение между семантически различными целыми типами: логический тип к HRESULT

C6217

Предупреждение C6217: неявное приведение между семантически различными целочисленными типами: проверка HRESULT с "not". Попробуйте вместо этого использовать макрос SUCCEEDED или FAILED.

C6219

Предупреждение C6219: неявное приведение между семантически различными целочисленными типами: сравнение HRESULT с 1 или TRUE. Попробуйте вместо этого использовать макрос SUCCEEDED или FAILED.

C6220

Предупреждение C6220: неявное приведение между семантически различными целочисленными типами: сравнение HRESULT с -1. Попробуйте вместо этого использовать макрос SUCCEEDED или FAILED.

C6221

Предупреждение C6221: неявное приведение между семантически различными целочисленными типами: сравнение HRESULT с целым числом. Попробуйте вместо этого использовать макрос SUCCEEDED или FAILED.

C6225

Предупреждение C6225: неявное приведение между семантически различными целочисленными типами: присвоение HRESULT значения 1 или TRUE. Попробуйте вместо этого использовать S_FALSE.

C6226

Предупреждение C6226: неявное приведение между семантически различными целочисленными типами: присвоение HRESULT значения -1. Попробуйте вместо этого использовать E_FAIL.

C6230

Предупреждение C6230: неявное приведение между семантически различными целочисленными типами: использование HRESULT в логическом контексте.

C6235

Предупреждение C6235: (<ненулевая константа> || <выражение>) всегда является ненулевой константой.

C6236

Предупреждение C6236: (<выражение> || <ненулевая константа> ) всегда является ненулевой константой.

C6237

Предупреждение C6237: (<нуль> && <выражение>) всегда равно нулю. При этом <выражение> не вычисляется и может создавать побочные эффекты..

C6239

Предупреждение C6239: (<ненулевая константа> && <выражение>) всегда равно результату <выражения>. Предполагалось использовать оператор побитового И?

C6240

Предупреждение C6240: (<выражение> && <ненулевая константа>) всегда равно результату <выражения>. Предполагалось использовать оператор побитового И?

C6242

Предупреждение C6242: выход за пределы данного блока try вызывает локальную очистку. При этом значительно снижается производительность.

C6244

Примечание C6244: локальное объявление <переменной> скрывает предыдущее объявление в строке <строка> файла <файл>.

C6246

Примечание C6246: локальное объявление <переменной> скрывает объявление такого же имени во внешней области. Дополнительные сведения: см. предыдущее объявление в <расположении>.

C6248

Предупреждение C6248: установка значения NULL для DACL для SECURITY_DESCRIPTOR приведет к наличию незащищенного объекта.

C6250

Предупреждение C6250: вызов <функции> VirtualFree без флага MEM_RELEASE может привести к высвобождению памяти, но не дескрипторов адресов (VAD); в результате будет утечка адресного пространства.

C6255

Предупреждение C6255: _alloca указывает наличие сбоя путем создания ошибки переполнения стека. Попробуйте вместо этого использовать _alloca_s.

C6258

Предупреждение C6258: использование TerminateThread не обеспечивает очистки потока.

C6259

Предупреждение C6259: код с подписью недоступен: (<выражение> & <константа>) в switch-expr не может иметь значение <метка case>.

C6260

Конструкция sizeof * sizeof обычно является ошибкой. Вы хотели использовать количество символов или количество байтов?

C6262

Предупреждение C6262: функция использует <константа> байт стека, что превышает /analyze:stacksize<константа>. Попробуйте переместить какие-либо данные в кучу.

C6263

Предупреждение C6263: использование _alloca в цикле может привести к быстрому переполнению стека.

C6268

Предупреждение C6268: неверный порядок операций: (<ТИП1>)(<ТИП2>)x + y. Возможно, отсутствуют скобки в (<ТИП1>)((<ТИП2>)x + y)

C6269

Предупреждение C6269: возможен неверный порядок операций: пропущено разыменование.

C6270

Предупреждение C6270: отсутствует аргумент с плавающей запятой в <функции>: добавьте аргумент с плавающей запятой, соответствующий определителю преобразования <номер>.

C6271

Предупреждение C6271: лишний аргумент передан <функции>: параметр <номер> не используется строкой формата.

C6272

Предупреждение C6272: передан параметр <номер>, не являющийся аргументом с плавающей запятой, тогда как в вызове <функции> требуется аргумент с плавающей запятой.

C6273

Предупреждение 6273: передан параметр <номер>, не являющийся целочисленным, тогда как в вызове <функции> требуется целочисленный аргумент. Если передается значение указателя, нужно использовать %p.

C6274

Предупреждение C6274: передан параметр <номер>, не являющийся знаком, тогда как в вызове <функции> требуется знак.

C6276

Предупреждение C6276: приведение между семантически различными строковыми типами: char* к wchar_t*. Использование неверной строки может привести к непредвиденному поведению.

C6277

Предупреждение C6277: имя приложения NULL с путем без кавычек в вызове <функции>. Возникает уязвимость безопасности, если путь содержит пробелы.

C6278

Предупреждение C6278: <переменная> выделяется с массивом new [], но удаляется скалярной операцией delete. Деструкторы не будут вызваны.

C6279

Предупреждение C6279: <переменная> выделяется скалярной операцией new, удаляется операцией массива delete [].

C6280

Предупреждение C6280: <переменная> выделяется <функцией>, но удаляется <функцией>.

C6281

Предупреждение 6281 — неверный порядок операций: операторы отношения имеют более высокий приоритет, чем побитовые операторы

C6282

Предупреждение C6282: неверный оператор: присвоение константы в логическом контексте. Рассмотрите возможность использования "==".

C6283

Предупреждение C6283: <переменная> выделяется с массивом new [], но удаляется скалярной операцией delete.

C6284

Предупреждение C6284: объект передан как параметр "%d", тогда как в вызове <функции> требуется строка.

C6285

Предупреждение C6285: (<ненулевая константа> || <ненулевая константа>) всегда является ненулевой константой. Предполагалось использовать оператор побитового И?

C6286

Предупреждение C6286: (ненулевая константа> || <выражение>) всегда является ненулевой константой. При этом <выражение> не вычисляется и может создавать побочные эффекты

C6287

Предупреждение C6287: избыточный код: правое и левое подчиненные выражения идентичны.

C6288

Предупреждение C6288: неверный оператор. Взаимное исключение && всегда равно нулю. Предполагалось использовать "||"?

C6289

Предупреждение C6289: неверный оператор. Взаимное исключение || всегда дает ненулевую константу. Предполагалось использовать "&&"?

C6290

Предупреждение C6290: побитовая операция над логическим результатом. "!" имеет более высокий приоритет, чем "&". Используйте "&&" или "(!(x & y))".

C6291

Предупреждение C6291: побитовая операция над логическим результатом. "!" имеет более высокий приоритет, чем "|". Используйте "||" или "(!(x | y))".

C6292

Предупреждение C6292: неправильно определен цикл for. Счетчик увеличивается с максимального значения.

C6293

Предупреждение C6293: неправильно определен цикл for. Счетчик уменьшается с минимального значения.

C6294

Предупреждение C6294: неправильно определен цикл for. Начальное условие не проходит проверку. Основная часть цикла не выполняется.

C6295

Предупреждение C6295: неправильно определен цикл for. Значения <переменной> находится в диапазоне от минимального до максимального. Цикл выполняется бесконечно.

C6296

Предупреждение C6296: неправильно определен цикл for. Основная часть цикла выполняется только один раз.

C6297

Предупреждение C6297: арифметическое переполнение. 32-разрядное значение сдвигается, а затем приводится к 64-разрядному значению. Результат может оказаться непредвиденным значением.

C6298

Предупреждение C6298: доступная только для чтения строка <указатель> используется в качестве доступного для записи строкового аргумента. Попытка записи в статическую память, доступную только для чтения, может привести к произвольным сбоям.

C6299

Предупреждение C6299: явное сравнение битового поля с логическим типам приведет к непредвиденным результатам.

C6302

Предупреждение C6299: явное сравнение битового поля с логическим типам приведет к непредвиденным результатам.

C6303

Предупреждение C6303: несоответствие строки формата. Передан параметр <номер>, являющийся широким символом, тогда как в вызове <функции> требуется символьная строка.

C6305

Предупреждение C6305: возможное несоответствие sizeof и countof.

C6306

Предупреждение C6306: неверный вызов <функции>: попробуйте использовать <функцию>, принимающую va_list в качестве аргумента.

C6308

Предупреждение C6308: "realloc" может вернуть нулевой указатель. Присвоение нулевого указателя <переменной>, которая передается в качестве аргумента для "realloc", приведет к утечки в исходном блоке памяти.

C6309

Предупреждение C6309: аргумент <номер> имеет нулевое значение, он не соответствует спецификации функции <функция>.

C6310

Предупреждение C6310: недопустимая константа в фильтре выражения может привести к непредвиденному поведению.

C6312

Предупреждение C6312: возможно образование бесконечного цикла. Использование константы EXCEPTION_CONTINUE_EXECUTION в выражении exception-filter внутри try-except.

C6313

Предупреждение C6313: неверный оператор. Флаг с нулевым значением нельзя проверить с помощью побитового И. Используйте проверку равенства для флагов с нулевыми значениями.

C6314

Предупреждение C6314: неверный порядок операций. Побитовое ИЛИ имеет более высокий приоритет, чем условный оператор. Добавьте скобки для уточнения.

C6315

Предупреждение C6315: неверный порядок операций. Побитовое И имеет более высокий приоритет, чем побитовое ИЛИ. Добавьте скобки для уточнения.

C6316

Предупреждение C6316: неверный оператор. Проверенное выражение является константой и отлично от нуля. Для определения установки разрядов используйте побитовое И.

C6317

Предупреждение C6317: неверный оператор. Логическое отрицание (!) не является взаимозаменяемым с дополнением до единицы (~).

C6318

Предупреждение C6318: неверное определение __try/__except. Использование EXCEPTION_CONTINUE_SEARCH или другой константы с нулевым результатом в выражении фильтра исключений. Код в блоке обработки исключений не выполняется.

C6319

Предупреждение C6319: использование оператора-запятой в выражении приводит к тому, что левый аргумент будет пропущен, если он не имеет побочных эффектов.

C6320

Предупреждение C6320: выражение фильтра исключений является константой EXCEPTION_EXECUTE_HANDLER. При этом могут быть показаны исключения, которые не предполагалось обрабатывать.

C6322

Предупреждение C6322: пустой блок _except.

C6323

Предупреждение 6323: использование арифметического оператора для логического типа.

C6324

Предупреждение C6324: возможно неверное использование <функции1>. Предполагалось использовать <функцию2>?

C6326

Предупреждение C6326: возможное сравнение константы с другой константой.

C6327

Предупреждение C6327: потенциальное переполнение буфера. SysAllocStringLen копирует <количество> знаков из строки <переменная> без проверки числа копируемых знаков. Возможен сбой кода.

C6328

Предупреждение C6328: <тип> передается как параметр <номер>, когда <тип> требуется в вызове <функции>.

C6331

Предупреждение C6331: недопустимый параметр. Совместная передача MEM_RELEASE и MEM_DECOMMIT для <функции> запрещена. В результате возникает сбой этого вызова.

C6332

Предупреждение C6332: недопустимый параметр. Передача нуля в качестве параметра dwFreeType для <функции> запрещена. В результате возникает сбой вызова.

C6333

Предупреждение C6333: недопустимый параметр. Передача MEM_RELEASE и ненулевого параметра dwSize функции <функция> запрещена. В результате возникает сбой вызова.

C6334

Предупреждение C6334: оператор sizeof применяется к выражению с оператором. Это может вызвать непредвиденные результаты.

C6335

Предупреждение C6335: утечка в обработчике данных <имя обработчика>.

C6336

Предупреждение C6336: арифметический оператор имеет более высокий приоритет, чем оператор вопроса, используйте скобки для уточнения.

C6381

Предупреждение C6381: для завершения работы <функции> API требуется допустимый dwReason или lpMessage.

C6383

Предупреждение C6383: переполнение буфера из-за преобразования счетчика элементов в счетчик байтов. Для параметра <номер> в вызове <функции> требуется счетчик элементов.

C6384

Предупреждение C6384: деление параметра sizeof указателя на другое значение.

C6385

Предупреждение C6385: недопустимые данные. При доступе к <имя буфера> считываемый размер равен <размер1> байт, но можно прочесть <размер2> байт: строки x, y.

C6386

Предупреждение C6386: переполнение буфера. Доступ к <имя буфера>, записываемый размер <размер1> байт, но можно записать <размер2> байт: строки x, y.

C6387

Предупреждение C6387: <аргумент> может иметь значение <значение>. Это противоречит спецификации функции <имя функции>, строки x, y.

C6388

Предупреждение C6388: <аргумент> не может иметь значение <значение>, так как это противоречит спецификации функции <имя функции>, строки x, y.

C6400

Предупреждение C6400: использование <имя функции> для сравнения со строкой константы <имя строки> без учета регистра. При применении для языков, отличных от английского, могут возникнуть непредвиденные результаты.

C6401

Предупреждение C6401: использование <имя функции> на языке по умолчанию для сравнения без учета регистра со строкой константы <имя строки>. При применении для языков, отличных от английского, могут возникнуть непредвиденные результаты.

C6500

Предупреждение C6500: недопустимая аннотация: недопустимое значение свойства <имя>.

C6501

Предупреждение C6503: конфликт аннотаций. Свойство <имя> конфликтует с ранее указанным свойством.

C6503

Предупреждение C6503: конфликт аннотаций. Ссылки нельзя помечать как Null=Yes и Null=Maybe.

C6504

Предупреждение C6504: недопустимая аннотация. Указатель можно использовать только для значений типа указателя, указателя на член и массива.

C6505

Предупреждение C6505: недопустимая аннотация. Свойство MustCheck нельзя использовать для значений типа void.

C6506

Предупреждение C6506: недопустимая аннотация. Свойство <имя> можно использовать только для значений типа указатель или массив.

C6507

Предупреждение C6507: конфликт аннотации. Свойство Null с Deref=0 в условии Post должно быть подмножеством свойства Null в условии Pre.

C6508

Предупреждение C6508: недопустимая аннотация. Доступ на запись запрещен для значений констант.

C6509

Предупреждение C6509: недопустимая аннотация. Нельзя ссылаться на "return" из предварительного условия.

C6510

Предупреждение C6506: недопустимая аннотация. Свойство NullTerminated можно использовать только для значений типа указателя или массива.

C6511

Предупреждение C6511: недопустимая аннотация. Свойство MustCheck должно иметь значение Yes или No.

C6512

Предупреждение C6512: недопустимая аннотация. Свойство Null должно иметь значение Maybe, если свойство Valid имеет значение No.

C6513

Предупреждение C6513: недопустимая аннотация. Для ElementSizeConst требуются дополнительные свойства размера.

C6514

Предупреждение C6514: недопустимая аннотация. Значение свойства <имя> превышает размер массива.

C6515

Предупреждение C6515: недопустимая аннотация. Свойство <имя> можно использовать только для значений типа указателей.

C6516

Предупреждение C6516: недопустимая аннотация. Для атрибута <имя> не указаны свойства.

C6517

Предупреждение C6517: конфликт аннотаций. Невозможно указать ValidElementsConst и ValidBytesConst для нечитаемых буферов.

C6518

Предупреждение C6518: конфликт аннотаций. Невозможно указать WriteableElementsConst и WriteableBytesConst для незаписываемых буферов.

C6521

Предупреждение C6521: указан недопустимый размер. Оператор * можно использовать только типов указателей.

C6522

Предупреждение C6522: неверно указан размер. Требуется выражение целого типа.

C6523

Предупреждение C6523: неверно указан размер. Параметр <имя> не найден.

C6525

Предупреждение C6525: неверно указан размер. Значение свойства может быть недопустимым.

C6526

Предупреждение C6526: неверно указан размер. Требуется выражение типа указателя или массива.

C6530

Предупреждение 6530: не распознан стиль строки формата <имя>.

C6535

Предупреждение C6535: буфер не может иметь размер <n>, превышающий размер max(size_t).

См. также

Основные понятия

Рекомендации по написанию безопасного кода

Другие ресурсы

Выявление и исправление дефектов кода C/C++