当前位置: 首页 > news >正文

【00010】

二、C语言

2.9位运算

1. 运算符

算数运算符
关系运算符
逻辑运算符
赋值运算符
特殊运算符
逗号运算符
sizeof运算符

2. 位运算符

& 按位与
| 按位或
^ 按位异或
~ 按位取反
<< 左移
>> 右移
与0得0,或1置1

3. 位运算常见操作

(1)将变量第n位置1

num |= (1 << n);

(2)将变量第n位置0

num &= ~(1 << n);

(3)异或可以实现两个变量数值的交换

a = a ^ b;
b = a ^ b;
a = a ^ b;

2.10 内存管理

1.C语言内存分布

2. 堆区

通过malloc申请堆区空间
通过free释放堆区空间
注意:
如果malloc的空间使用完毕没有及时free释放,会产生内存泄露
使用场景:
函数体内的局部数据不想随函数结束被回收,可以放入堆区空间
存放比较大的数据(MB),存放到堆区空间

3. 程序错误调试方法

(1)语法错误

Warnning:告警,程序编译成功,但存在告警,可能运行时会产生问题
error:错误,程序编译失败,找到出错的问题修改代码

(2)逻辑错误

打印方法调试:在可能出现逻辑错误的位置加入printf打印,运行时查看打印结果与设想
结果是否一致,从而定位出错的位置

GDB调试方法

1. 编译代码时加入-g选项,允许进行gdb调试

gcc filename.c -g

2. 使用gdb调试代码

gdb a.out

3. 输入命令调试代码

l 查看代码
b 行号/函数名 在行号/函数名对应的位置设置断点
r 运行代码
n 单步执行
s 进入函数体内部运行
p 变量名 查看变量的值
c 继续运行程序到下一处断点

(3)段错误

1.打印方法

程序代码中多加入一些打印,前一句能够打印出来,后一句打印部出来,两句代码中间
就产生段错误

2.通过gdb定位段错误

分布调试,查看代码是否产生段错误
3.允许程序段错误时产生core文件,core文件中包含段错误产生时的堆栈调用关系,根据
这个core文件搭配gdb快速找到段错误出现的位置
(1)编译代码时加入-g选项

gcc filename.c -g
(2)允许代码段错误时产生core文件

ulimit -c unlimited
(3)运行代码产生段错误,并生成core文件
(4)使用gdb调试core文件,快速定位到程序产生段错误的位置

gdb a.out core

4.内存越界、内存溢出

使用strncpy、strncat、strncmp替代strcpy、strcat、strcmp

5.内存泄露

1. 申请的堆区空间没有释放会产生内存泄露
2. 使用valgrind工具查看内存是否泄露

valgrind --tool=memcheck --leak-check=full ./a.out

6.内存碎片

(1)由于堆区空间存在一些占用的小的空间,导致大空间不连续,无法被申请使用,该
现象称为内存碎片
(2)malloc不要申请小空间
(3)小空间尽量使用栈区,大空间再使用堆区,如果必须要用堆区,将多个小的空间封
装成一个大空间(结构体),再一次性申请堆区空间

http://www.jsqmd.com/news/1344854/

相关文章:

  • Ventoy与云固件深度解析:从多系统启动到云端固件架构
  • AI知识库搜索不准?文档分块策略是关键,详解4种实战方案与评估方法
  • 数据集格式转化 xml转换txt xml转换txt 转换代码示例参考 VOC(xml)格式如何转换yolo(txt )格式 (1)
  • Java开发环境搭建指南:从JDK到IntelliJ IDEA的完整配置
  • 气体放电管(GDT)原理、选型与电路防护设计实战指南
  • 缓存穿透、缓存击穿和缓存雪崩详解
  • 【Web安全】API安全测试实战指南(OWASP API Top 10全覆盖,保姆级教程)
  • 北京工商代办服务怎么选?2026年注册公司、税务解异常及代理记账机构实务评测 - 优质品牌商家
  • Android分区存储下外置存储设备(U盘/SD卡)的发现、监听与安全访问实战
  • Hugging Face Diffusers惊现高危漏洞:加载一个模型就能让攻击者接管你的服务器
  • 高效开发必备:Linux与开发工具核心指令大全
  • 长沙代理记账推荐|正规财税服务机构甄选参考 - 行业深度分析
  • 三明刑事上诉律师事务所怎么选更稳妥结合福建熹龙律师事务所 - 热点品牌推荐
  • DeepSeek V4 Flash接入Codex教程
  • 基于大模型的代码库理解与AI编程助手构建实践
  • YOLO[多种场景下的铅笔]目标检测数据集
  • URP自定义光照Shader实战:完整光照与阴影实现
  • 具身智能协同机制研究:TVA与VLA的统一建模(3)
  • 2026年六西格玛DOE实验设计怎么入门——众智商学院张明老师制造业工艺优化多因子分析实操 - 众智商学院cppm官方
  • CSS box-shadow 盒阴影完全指南:从参数顺序到多层立体投影
  • 基于Coze平台构建短视频自动化生成工作流:从文案到发布的完整实践
  • 青岛厂房空气能热泵销售安装哪家好认准青岛岳峰制冷工程 - 热点品牌推荐
  • C语言编程思维:从语法到实战,构建健壮程序的系统方法
  • Unity PlayerPrefs编辑器:原理、应用与高效调试指南
  • 从AI玩具到工程化:用“配方”思维构建可复现的生成式AI工作流
  • 动图怎么变成视频 2026亲测可用的免费方法 - 图片处理研究员
  • Unity Inspector变量显示控制:public、private与特性Attribute实战指南
  • 2026亲测有效教程:不下载软件怎么把视频转成GIF - 图片处理研究员
  • 腾讯云跨账号服务器迁移实战:镜像共享与零停机部署指南
  • 哈尔滨网站建设制作哪家好:揭秘本地优质服务商的选择逻辑与避坑指南