拓冰建站拓冰建站
首页 / 资讯中心 / 正文

【00010】

二、C语言2.9位运算1. 运算符算数运算符关系运算符逻辑运算符赋值运算符特殊运算符逗号运算符sizeof运算符2. 位运算符 按位与| 按位或^ 按位异或~ 按位取反 左移 右移与0得0或1置13. 位运算常见操作1将变量第n位置1num | (1 n);2将变量第n位置0num ~(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 -g2. 使用gdb调试代码gdb a.out3. 输入命令调试代码l 查看代码b 行号/函数名 在行号/函数名对应的位置设置断点r 运行代码n 单步执行s 进入函数体内部运行p 变量名 查看变量的值c 继续运行程序到下一处断点3段错误1.打印方法程序代码中多加入一些打印前一句能够打印出来后一句打印部出来两句代码中间就产生段错误2.通过gdb定位段错误分布调试查看代码是否产生段错误3.允许程序段错误时产生core文件core文件中包含段错误产生时的堆栈调用关系根据这个core文件搭配gdb快速找到段错误出现的位置1编译代码时加入-g选项gcc filename.c -g2允许代码段错误时产生core文件ulimit -c unlimited3运行代码产生段错误并生成core文件4使用gdb调试core文件快速定位到程序产生段错误的位置gdb a.out core4.内存越界、内存溢出使用strncpy、strncat、strncmp替代strcpy、strcat、strcmp5.内存泄露1. 申请的堆区空间没有释放会产生内存泄露2. 使用valgrind工具查看内存是否泄露valgrind --toolmemcheck --leak-checkfull ./a.out6.内存碎片1由于堆区空间存在一些占用的小的空间导致大空间不连续无法被申请使用该现象称为内存碎片2malloc不要申请小空间3小空间尽量使用栈区大空间再使用堆区如果必须要用堆区将多个小的空间封装成一个大空间结构体再一次性申请堆区空间
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门