C语言数组去重代码求审核:sizeof用于数组下标是否合理
代码审核结果
存在的问题
sizeof用法逻辑错误:sizeof(a)返回的是数组a占用的总字节数,不是数组元素个数,获取元素个数的正确写法是sizeof(a) / sizeof(a[0])。你用sizeof(a)定义flag数组长度的语法本身合规,但注释中关闭的标记逻辑用a[i]作为flag下标完全不可行:int类型取值范围远大于flag数组长度,只要a[i]大于等于flag长度或为负数,就会触发越界访问,直接导致程序崩溃。- 去重逻辑不符合通用需求:当前启用的逻辑仅能去除相邻重复元素,无法处理非相邻的重复值,比如示例数组中两处不相邻的
2,运行后输出仍然会保留两个2。如果你的需求仅为相邻去重,当前逻辑没问题,否则需要调整实现方案。 - 标记法设计不合理:如果要实现全量去重,不能直接用普通数组当哈希表存储
int类型的标记,int取值范围为[-2^31, 2^31-1],根本不可能在栈上开辟覆盖整个取值范围的数组,会直接栈溢出。 - 冗余语法:
main函数结束的大括号后多写了一个分号,C语法虽允许,但属于冗余写法,不符合通用编码规范。
内容的提问来源于stack exchange,提问作者Milan
相关产品推荐
相关产品推荐

