首页 > 编程语言 >C语言编程常见问题总结

C语言编程常见问题总结

时间:2024-11-20 22:19:41浏览次数:1  
标签:释放 常见问题 程序运行 编程 C语言 内存 返回值 资源 指针

1、返回值处理

① 被调函数执行结果对业务有影响,调用者没有处理返回值:可能导致空指针访问、缺少回退处理(资源泄露)

②处理函数的返回值不准确:返回值数据类型被错误转换,返回值比较的目标不是函数的返回值系列

 

2、断言的使用

① 在断言中包含了非逻辑表达式

② 对程序运行中可能发生的情况使用断言处理

断言用于程序运行中不应该发生的情况进行检查;条件判断用于对程序运行过程中可能发生的情况进行检查;

 

3、系统资源的使用

① 资源的申请释放不在同层次;

② 在成对的系统资源操作之间异常退出;

③ 过早申请资源,导致不必要的异常退出;

④ 将申请的资源直接赋给间接变量:多级指针和全局变量

 

4、内存释放

① 用错误的函数释放内存资源

② 释放非法地址

③ 内存重复释放;

④ 释放后再使用

⑤ 释放前没有摘链

 

5、内存越界

① 字符串、内存拷贝/清零 操作越界;

② 缓冲区空间太小,导致数据溢出;

③ 非法参数没有检查导致访问越界;

 

6、空指针/野指针

① 释放全局变量上的资源后没有清零全局变量;

② 释放数据结构上挂接的内存后没有清零数据结构上的挂接字段;

③ 导致访问空指针;

 

7、未初始化

① 导致访问未初始化变量或数据结构字段或动态内存,使得问题时复现时不复现

 

8、代码冗余

① 反复多重间接寻址访问数据,反复调用相同或类似的大段代码;

② 只是临时使用小内存(<256字节),申请动态内存;

 

9、编程接口

模块接口或者驱动接口使用错误,导致功能或资源类问题异常;

 

10、资源型接口设计

① 释放参数携带的资源时规则不一致:例如成功时释放,失败时不释放;

② 复合资源的申请和释放没有封装 或申请释放函数封装不对称;

③ 资源创建/获取型函数没有将资源作为返回值,而是作为输出参数

标签:释放,常见问题,程序运行,编程,C语言,内存,返回值,资源,指针
From: https://www.cnblogs.com/czy363/p/18559476

相关文章

  • 泷羽sec学习--Shell编程之条件判断语句
    学习内容来自B站UP:泷羽sec微信公众号:泷羽sec1.基本概念在Shell脚本中,if​语句用于条件判断。它允许脚本根据不同的条件执行不同的代码块。这在自动化任务、系统管理等场景中非常有用,比如根据文件是否存在来决定是否进行备份操作。2.基本语法结构单分支if​语句:格式......
  • 泷羽sec学习--Shell编程之用户交互
    学习内容来自B站UP:泷羽sec微信公众号:泷羽sec1.使用read命令实现交互基本语法:read​命令用于从标准输入(通常是键盘)读取用户输入的数据。其基本格式为read[选项]变量名​。例如,readname​会暂停脚本的执行,等待用户输入一个字符串,并将这个字符串赋值给变量name​。选......
  • 2个月搞定计算机二级C语言——真题(12)解析
    1.前言本篇我们讲解2个月搞定计算机二级C语言——真题122.程序填空题2.1题目要求2.2提供的代码#include<stdio.h>#defineN3intfun(int(*a)[N]){inti,j,m1,m2,row,colum;m1=m2=0;for(i=0;i<N;i++){j=N......
  • C++ 模板元编程高级技巧与大型项目架构中的应用实践
    C++模板元编程(TemplateMetaprogramming,TMP)是一种利用C++模板在编译时进行计算和逻辑推理的技术。模板元编程可以极大地提升程序的灵活性、性能和可扩展性,尤其是在大型项目的架构中,能够有效地处理类型推导、优化计算和代码生成等任务。随着C++11、C++14、C++17和C++20......
  • C语言:数组的学习
    1.什么是数组?数组是一组相同类型元素的集合。数组可以存储1个或多个数据。数组中存储的数据的类型是相同的。数组分为一维数组和多维数组。变量和数组都是容器,变量只能存储一个数据,数组可以存储多个。2.一维数组创建和初始化存放在数组中的数据叫做数组的元素。数组是自......
  • C语言第14节:字符函数和字符串函数
    1.字符分类函数C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个头文件是<ctype.h><ctype.h>头文件中的字符分类函数提供了一组用于检查单个字符特性的函数。这些函数接收一个字符(通常为int类型的char值),返回......
  • Cangjie_仓颉编程-包管理工具
    模块与包使用第三方包--包导入导入是一种用来将其他包或其他包中的成员引入到当前程序中的机制。 单导入别名导入全导入批量导入 导入名称冲突检查包声明--------包声明创建包和分发包写程序的人需要的包管理器,和管理系统的人需要的包管理器 C......
  • 经典C语言代码——part 4(素数问题)
    【程序10】题目:打印楼梯,同时在楼梯上方打印两个笑脸。 1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。2.程序源代码:#include"stdio.h"main(){inti,j;printf("\1\1\n");/*输出两个笑脸*/for(i=1;i<11;i++){for(j=1;j<=i;j++)printf......
  • [编程笔记] EasyUI显示分组合计行
    我们常会有下面这种需求: 表格的底部显示合计,项目用的是EasyUI,实现起来很简单,datagrid初始化时设置showFooter为true,然后后端返回rows时,再同级返回一个footer,比如这种结构: 哪一列需要合计,footer就返回对应的列名,以及对应的值。不过我遇到一......
  • 解锁 Python 中的字符编码:从非 UTF-8 代码到高效编程
    引言在Python编程的世界中,字符编码问题常常是开发者们头疼的一大难题。尤其是当你遇到诸如 SyntaxError:Non-UTF-8codestartingwith'\xb2' 这样的错误时,很可能会感到困惑和沮丧。本文将深入探讨Python中的字符编码问题,并提供一些实用的解决方案,帮助你更好地理解和......