C/C++ 代码分析警告

本节列出介于 C6000 和 C6999 之间的 C/C++ 代码分析警告。

本节内容

警告编号

说明

C6001

警告 C6001:使用未初始化的内存 <variable>

C6011

警告 C6011:正在取消 NULL 指针 <name> 的引用

C6029

警告 C6029:对 <function> 的调用中可能会发生缓冲区溢出: 使用未经检查的值

C6031

警告 C6031:返回值被忽略: <function> 可能会返回意外的值

C6053

警告 C6053:对 <function> 的调用不能为字符串 <variable> 添加字符串零终止符

C6054

警告 C6054:字符串 <variable> 不能以零结尾

C6057

警告 C6057:<function> 调用中的字符数/字节数不匹配,造成缓冲区溢出

C6059

警告 C6059:<function> 调用中的长度参数不正确。 应传递剩余字符数,而不是 <variable> 的缓冲区大小

C6063

警告 C6063:缺少 <function> 的字符串参数(对应于转换说明符 <number>)

C6064

警告 C6064:缺少 <function> 的整型参数(对应于转换说明符 <number>)

C6066

警告 C6066:传递了非指针参数 <number>,而对 <function> 的调用需要指针参数

C6067

警告 C6067:参数 <number> 在对 <function> 调用中必须是字符串的地址

C6200

警告 C6200:索引 <name> 超出了 <min> 至 <max> 的范围,即非堆栈缓冲区 <variable> 的有效索引范围

C6201

警告 C6201:<variable> 中缓冲区溢出,该缓冲区可能是在堆栈中分配的: 索引 <name> 超出了 <min> 至 <max> 的有效索引范围

C6202

警告 C6202:<variable> 在对 <function> 的调用中缓冲区溢出,该缓冲区可能是在堆栈中分配的: 长度 <size> 超过了缓冲区的大小 <max>

C6203

警告 C6203:缓冲区 <variable> 在对 <function> 的调用中溢出: 长度 <size> 超过了缓冲区的大小

C6204

警告 C6204:对 <function> 的调用中可能发生了缓冲区溢出: 使用了未经检查的参数 <variable>

C6209

警告 C6209:正在使用“sizeof <variable1>”作为参数 <number> 调用 <function>,其中 <variable2> 可能是一个宽字符数组,是否使用字符数而不是字节数?

C6211

警告 C6211:由于出现异常,正在泄漏内存 <pointer>。 应考虑使用局部 catch 块清理内存

C6214

警告 C6214:语义不同的整数类型之间的强制转换: HRESULT 转换为 Boolean 类型

C6215

警告 C6215:语义不同的整数类型之间的强制转换: Boolean 类型转换为 HRESULT

C6216

警告 C6216:语义不同的整数类型之间由编译器插入的强制转换: Boolean 类型转换为 HRESULT

C6217

警告 C6217:语义不同的整数类型之间的隐式强制转换: 使用“not”测试 HRESULT。 应考虑改用 SUCCEEDED 或 FAILED 宏

C6219

警告 C6219:语义不同的整数类型之间的隐式强制转换: 将 HRESULT 与 1 或 TRUE 进行比较。 应考虑改用 SUCCEEDED 或 FAILED 宏

C6220

警告 C6220 - 语义不同的整数类型之间的隐式强制转换: 将 HRESULT 与 -1 进行比较。 应考虑改用 SUCCEEDED 或 FAILED 宏

C6221

警告 C6221:语义不同的整数类型之间的隐式强制转换: 将 HRESULT 与一个整数进行比较。 应考虑改用 SUCCEEDED 或 FAILED 宏

C6225

警告 C6225:语义不同的整数类型之间的隐式强制转换: 将 1 或 TRUE 赋给 HRESULT。 应考虑改用 S_FALSE

C6226

警告 C6226:语义不同的整数类型之间的隐式强制转换: 将 -1 赋给 HRESULT。 应考虑改用 E_FAIL

C6230

警告 C6230:语义不同的整数类型之间的隐式强制转换: 在 Boolean 上下文中使用 HRESULT

C6235

警告 C6235:(<non-zero constant> || <expression>)始终为非零常数

C6236

警告 C6236:(<expression> || <non-zero constant>)始终为非零常数

C6237

警告 C6237:(<zero> && <expression>)始终为零。 任何情况下都不会计算其中的 <expression>,且可能具有负面影响

C6239

警告 C6239:(<non-zero constant> && <expression>)的值始终等于 <expression> 的计算结果。 是否希望使用按位与运算符?

C6240

警告 C6240:(<expression> && <non-zero constant>)的值始终等于 <expression> 的计算结果。 是否希望使用按位与运算符?

C6242

警告 C6242:从此 try 块中跳转将强制展开局部堆栈。 这样会严重影响性能

C6244

警告 C6244:<variable> 的局部声明遮蔽了此前位于 <line> 行(<file> 中)的声明

C6246

警告 C6246:<variable> 的局部声明遮蔽了外部作用域中具同名的声明。 附加信息: 请参见此前位于 <location> 的声明。

C6248

警告 C6248:将 SECURITY_DESCRIPTOR 的 DACL 设置为 NULL 将产生一个不受保护的对象

C6250

警告 C6250:不使用 MEM_RELEASE 标志调用 <function> 可能会释放内存,但不会释放地址说明符 (VAD);这样会导致地址空间泄漏

C6255

警告 C6255:_alloca 通过引发堆栈溢出异常表明失败。 应考虑改用 _alloca_s

C6258

警告 C6258:使用 TerminateThread 将不允许进行相应的线程清理

C6259

警告 C6259:无法访问带标签的代码: switch 表达式中的(<expression> & <constant>)不能计算为 <case-label>

C6260

警告 C6260:sizeof * sizeof 在绝大部分情况下是错误的,打算使用字符数还是字节数?

C6262

警告 C6262:函数使用了堆栈中的 <constant> 个字节: 超过了 /analyze:stacksize<constant>。 请考虑将某些数据移到堆中

C6263

警告 C6263:在循环中使用 _alloca: 这样会很快造成堆栈溢出

C6268

警告 C6268:错误的运算顺序: (<TYPE1>)(<TYPE2>)x + y。 (<TYPE1>)((<TYPE2>)x + y)中可能缺少括号

C6269

警告 C6269:运算顺序可能不正确: 取消引用被忽略

C6270

警告 C6270:缺少 <function> 的浮点型参数: 添加一个对应于转换说明符 <number> 的浮点型参数

C6271

警告 C6271:向 <function> 传递了额外参数: 参数 <number> 未由格式字符串使用

C6272

警告 C6272:传递了非浮点型参数 <number>,而对 <function> 的调用需要浮点型参数

C6273

警告 6273:传递了非整型参数 <number>,而对 <function> 的调用需要整型参数: 如果当前传递的是一个指针值,应使用 %p

C6274

警告 C6274:传递了非字符型参数 <number>,而对 <function> 的调用需要字符型参数

C6276

警告 C6276:语义不同的字符串类型之间的强制转换: char* 到 wchar_t*。 使用无效的字符串会导致未定义的行为

C6277

警告 C6277:在对 <function> 的调用中使用的 NULL 应用程序名含未加引号的路径: 如果路径中包含空格将导致安全漏洞

C6278

警告 C6278:<variable> 使用数组 new [] 分配,但使用标量 delete 删除。 析构函数将不被调用

C6279

警告 C6279:<variable> 使用标量 new 分配,但使用数组 delete [] 删除

C6280

警告 C6280:<variable> 使用 <function> 分配,但使用 <function> 删除

C6281

警告 6281 - 运算顺序不正确: 关系运算符的优先级高于位运算符

C6282

警告 C6282:运算符不正确: 在 Boolean 上下文中执行了常数赋值。 应考虑改用“==”

C6283

警告 C6283:<variable> 使用数组 new [] 分配,但使用标量 delete 删除

C6284

警告 C6284:传递了对象参数“%d”,而对 <function> 的调用需要字符串参数。

C6285

警告 C6285:(<non-zero constant> || <non-zero constant>)的值始终为非零常数。 是否希望使用按位与运算符?

C6286

警告 C6286:(<non-zero constant> || <expression>)始终为非零常数。 任何情况下都不会计算其中的 <expression>,且可能具有负面影响

C6287

警告 C6287:冗余代码: 左右两侧的子表达式完全相同

C6288

警告 C6288:运算符不正确: 基于 && 的相同运算始终为 0。 是否希望改用 ||?

C6289

警告 C6289:运算符不正确: 基于 || 的互斥运算为非零常数。 是否希望改用 &&?

C6290

警告 C6290:对逻辑结果的位运算: ! 的优先级高于 &。 应改用 && 或 (!(x & y))

C6291

警告 C6291:对逻辑结果的位运算: ! 的优先级高于 |。 应改用 || 或 (!(x | y))

C6292

警告 C6292:for 循环定义错误: 从最大值开始向上计数

C6293

警告 C6293:for 循环定义错误: 从最小值开始向下计数

C6294

警告 C6294:for 循环定义错误: 初始条件不满足测试。 循环体未执行

C6295

警告 C6295:for 循环定义错误: <variable> 值始终介于“min”到“max”范围之间。 循环将无限执行

C6296

警告 C6296:for 循环定义错误: 循环体仅执行一次

C6297

警告 C6297:算术溢出: 对 32 位值进行移位操作,然后强制转换为 64 位值。 可能得到非预期的结果值

C6298

警告 C6298:将只读字符串 <pointer> 用作可写字符串参数: 这样会导致尝试写入静态只读内存并造成随机性崩溃

C6299

警告 C6299:对一个位字段和 Boolean 类型进行显式比较会产生意外的结果

C6302

警告 C6302:格式字符串不匹配: 传递了字符字符串参数 <number>,而对 <function> 的调用需要宽字符字符串参数

C6303

警告 C6303:格式字符串不匹配: 传递了宽字符字符串参数 <number>,而对 <function> 的调用需要字符字符串参数

C6305

警告 C6305:sizeof 和 countof 量值之间可能不一致

C6306

警告 C6306:不正确的 <function> 调用: 应考虑使用接受 va_list 作为参数的 <function>

C6308

警告 C6308:“realloc”可能返回 null 指针: 将 null 指针赋给 <variable> (后者将作为参数传递给“realloc”)将导致原始内存块泄漏

C6309

警告 C6309:参数 <number> 为 null: 这不符合 <function> 的函数规范

C6310

警告 C6310:异常筛选器中的非法常数会导致意外的行为

C6312

警告 C6312:可能是无限循环: 在一个 try-except 的异常筛选器表达式中使用常数 EXCEPTION_CONTINUE_EXECUTION

C6313

警告 C6313:运算符不正确: 不能使用按位与来测试零值标志。 应使用相等测试来检查零值标志

C6314

警告 C6314:运算顺序不正确: 按位或的优先级高于条件表达式运算符。 请使用括号明确指定优先级

C6315

警告 C6315:运算顺序不正确: 接位与的优先级高于按位或。 请使用括号明确指定优先级

C6316

警告 C6316:运算符不正确: 被测试的表达式为非零常数。 请使用按位与确定是否设置相应的位

C6317

警告 C6317:运算符不正确: 逻辑非(!)与 1 的补数(~)不可互换

C6318

警告 C6318:__try/__except 未正确定义: 在异常筛选器表达式中使用了常数 EXCEPTION_CONTINUE_SEARCH 或另一个计算结果为 0 的常数。 异常处理程序块中的代码将不会执行

C6319

警告 C6319:在被测试的表达式中使用了逗号运算符,导致左侧的参数在无副作用时被忽略

C6320

警告 C6320:异常筛选器表达式为常数 EXCEPTION_EXECUTE_HANDLER。 这样可能会屏蔽不打算处理的异常

C6322

警告 C6322:空的 _except 块

C6323

警告 C6323:对一个或多个 Boolean 类型使用算术运算符

C6324

警告 C6324:<函数 1> 的使用可能不正确: 是否希望使用 <函数 2>?

C6326

警告 C6326:可能对两个常数进行比较

C6327

警告 C6327:可能出现缓冲区溢出: SysAllocStringLen 复制 <number> 个字符(从字符串 <variable>),而未验证要复制的字符数。 代码可能崩溃

C6328

警告 C6328:已将 <type> 作为参数 <number> 传递,而需要使用 <type> 调用 <function>

C6331

警告 C6331:无效的参数: 不允许将 MEM_RELEASE 和 MEM_DECOMMIT 与 <function> 一起传递。 这会导致此调用失败

C6332

警告 C6332:无效的参数: 不允许将 0 作为 dwFreeType 参数传递给 <function>。 这会导致此调用失败

C6333

警告 C6333:无效的参数: 不允许将 MEM_RELEASE 和非零 dwSize 参数一起传递给 <function>。 这会导致此调用失败

C6334

警告 C6334:将 sizeof 运算符应用于带有运算符的表达式可能产生意外的结果

C6335

警告 C6335:泄漏进程信息句柄 <handlename>

C6336

警告 C6336:算术运算符的优先级高于问号运算符,请使用括号明确指定优先级

C6381

警告 C6381:Shutdown API <function> 需要一个有效的 dwReason 或 lpMessage

C6383

警告 C6383:将元素数转换为字节数造成缓冲区溢出: 需要使用元素数作为参数 <number> 调用 <function>

C6384

警告 C6384:用另一值除指针的 sizeof 值

C6385

警告 C6385:无效的数据: 访问 <buffer name> 时,<size1> 个字节可读,但可能读取了 <size2> 个字节: 行: x, y

C6386

警告 C6386:缓冲区溢出: 访问 <buffer name> 时,<size1> 个字节可写,但可能写入了 <size2> 个字节: 行: x, y

C6387

警告 C6387:<argument> 可能是 <value>: 这不符合函数 <function name> 的规范: 行: x, y

C6388

警告 C6388:<argument> 不能是 <value>: 这不符合函数 <function name> 的规范: 行: x, y

C6400

警告 C6400:使用 <function name> 执行与常数字符串 <string name> 的不区分大小写的比较。 这样会在非英语区域设置中产生意外结果

C6401

警告 C6401:在默认区域设置中使用 <function name> 执行与常数字符串 <string name> 的不区分大小写的比较。 这样会在非英语区域设置中产生意外结果

C6500

警告 C6500:无效的批注: <name> 属性的值无效

C6501

警告 C6501:批注冲突: <name> 属性与以前指定的属性冲突

C6503

警告 C6503:批注冲突: 引用不可标记为 Null=Yes 或 Null=Maybe

C6504

警告 C6504:无效的批注: 属性只能用于指针值、指向成员的指针值或数组类型值

C6505

警告 C6505:无效的批注: MustCheck 属性不可用于 void 类型的值

C6506

警告 C6506:无效的批注: <name> 属性只能用于指针值或数组类型值

C6507

警告 C6507:批注冲突: 后置条件中 Deref=0 处的 Null 属性必须是前置条件中 Null 属性的一个子集

C6508

警告 C6508:无效的批注: 不允许对 const 值执行写访问

C6509

警告 C6509:无效的批注: 不能从前置条件引用“return”

C6510

警告 C6510:无效的批注: NullTerminated 属性只能用于指针值或数组类型值

C6511

警告 C6511:无效的批注: MustCheck 属性必须为 Yes 或 No

C6512

警告 C6512:无效的批注: 如果 Valid 属性为 No,Null 属性必须为 Maybe

C6513

警告 C6513:无效的批注: ElementSizeConst 需要额外的大小属性

C6514

警告 C6514:无效的批注: <name> 属性的值超出了数组的大小

C6515

警告 C6515:无效的批注: <name> 属性只能用于指针类型的值

C6516

警告 C6516:无效的批注: 没有为 <name> 特性指定属性

C6517

警告 C6517:批注冲突: 不能在不可读的缓冲区上指定 ValidElementsConst 和 ValidBytesConst

C6518

警告 C6518:批注冲突: 不能在不可写的缓冲区上指定 WriteableElementsConst 和 WriteableBytesConst

C6521

警告 C6521:大小规格无效: * 运算符只能用于指针类型

C6522

警告 C6522:大小规格无效: 表达式必须为整型

C6523

警告 C6523:大小规格无效: 未找到参数 <name>

C6525

警告 C6525: 大小规格无效: 属性值可能无效

C6526

警告 C6526:大小规格无效: 表达式必须为数组类型或指针类型

C6530

警告 6530:无法识别的格式字符串样式 <name>

C6535

警告 C6535:缓冲区的大小不能为 <n>,大于 max(size_t)

请参见

概念

安全代码编写准则

其他资源

使用代码分析来分析 C/C++ 代码质量