C语言编程常见问题总结
1、返回值处理
① 被调函数执行结果对业务有影响,调用者没有处理返回值:可能导致空指针访问、缺少回退处理(资源泄露)
②处理函数的返回值不准确:返回值数据类型被错误转换,返回值比较的目标不是函数的返回值系列
2、断言的使用
① 在断言中包含了非逻辑表达式
② 对程序运行中可能发生的情况使用断言处理
断言用于程序运行中不应该发生的情况进行检查;条件判断用于对程序运行过程中可能发生的情况进行检查;
3、系统资源的使用
① 资源的申请释放不在同层次;
② 在成对的系统资源操作之间异常退出;
③ 过早申请资源,导致不必要的异常退出;
④ 将申请的资源直接赋给间接变量:多级指针和全局变量
4、内存释放
① 用错误的函数释放内存资源
② 释放非法地址
③ 内存重复释放;
④ 释放后再使用
⑤ 释放前没有摘链
5、内存越界
① 字符串、内存拷贝/清零 操作越界;
② 缓冲区空间太小,导致数据溢出;
③ 非法参数没有检查导致访问越界;
6、空指针/野指针
① 释放全局变量上的资源后没有清零全局变量;
② 释放数据结构上挂接的内存后没有清零数据结构上的挂接字段;
③ 导致访问空指针;
7、未初始化
① 导致访问未初始化变量或数据结构字段或动态内存,使得问题时复现时不复现
8、代码冗余
① 反复多重间接寻址访问数据,反复调用相同或类似的大段代码;
② 只是临时使用小内存(<256字节),申请动态内存;
9、编程接口
模块接口或者驱动接口使用错误,导致功能或资源类问题异常;
10、资源型接口设计
① 释放参数携带的资源时规则不一致:例如成功时释放,失败时不释放;
② 复合资源的申请和释放没有封装 或申请释放函数封装不对称;
③ 资源创建/获取型函数没有将资源作为返回值,而是作为输出参数