欢迎光临
我们一直在努力

c语言基础,常用库函数,内存常见问题的调试方法

sprintf

将格式化字符串内容放入指定地址空间

常用于程序中获得printf打印的内容

可以用于字符串拼接

sscanf

从指定空间中接收格式化字符串

字符串格式非常固定,符合scanf常用的格式

strtok

字符串分割函数,能够根据指定的字符集对字符串进行分割

//pstr指向的字符串遇到' '分割

strtok(pstr, " ");

//将上次分割剩余的内容再按照' '分割

strtok(NULL, " ");

//将上次分割剩余的内容遇到' ', ',', '?'分割

strtok(NULL, " ,?:");

strstr

在字符串中查找子串出现的位置

//pstr指向的字符串中查找" "字符串,如果没有返回NULL

strstr(pstr, " ");

内存常见问题调试方法

C语言程序错误:

1. 语法错误:

1. 错误(error):语法错误,无法生成对应的二进制文件

2. 告警(Warnning):语法警告,语法有可能会出现问题,不影响二进制文件的生成,程

序运行可能会出错

2. 逻辑错误:

程序运行结果和预期不符

1. 打印法

在可能出错的位置加入打印,查看对应的结果是否与预期一致,如果一致在后续的代码

中继续加入打印,直到不满预期为止,则完成对错误的定位

2. gdb调试

根据问题单步调试,直到找到错误为止

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

gcc filename.c -g

2.调试生成的二进制程序

gdb ./a.out

3.设置断点

b 行号/函数名

4.运行代码

r

5.输入命令调试

n 分步执行

c 执行到下一处断点为止

s 进入函数内调试

p 打印

q 退出

内存问题调试:

1. 内存越界(内存溢出):

现象:代码会出现偶现性、必现性的BUG,程序代码不稳定,数据被莫名其妙的修改

问题原因:指针的越界访问,特别是字符串越界访问

示例:

strcpystrcatstrcmpsprintf 这些都是有越界风险的函数

推荐使用strncpystrncatstrncmpsnprintf 替换之前有越界风险的函数

strcncpy(dst, src, sizeof(dst)-1);

替换

strcpy(dst, src);

段错误调试:

现象:程序运行后报错 Segmentation fault (core dumped)

问题原因:错误使用指针,访问非法空间

解决方法:

打印法,加入打印,前一句能打印,后一句无法打印,证明中间代码出现问题

gdb调试段错误:

1. 编译时代码加入 -g 选项

2. 程序代码段错误时会产生core文件

3. 修改core配置文件(改一次),并使用命令允许生成core文件

        ulimit -c unlimited

4.使用gdb调试段错误

        gdb a.out core

内存泄露:

现象:长时间运行代码,剩余内存空间越来越少

问题原因:内存泄露,申请的空间没有被释放,所以不断有空间被申请,造成可用空间越来越

解决方法:

valgrind

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

安装valgrind工具

1. 让虚拟机能够上网:

1.打开"虚拟机" -> "设置" -> "网络适配器" -> 选择"NAT模式" -> 点击"

"

2.设置UbuntuIP地址为自动获取IP地址:

1.打开网卡配置文件

sudo vim /etc/network/interfaces

修改文件内容为:

auto lo

iface lo inet loopback

auto ens33

iface ens33 inet dhcp

2.重启虚拟机

sudo shutdown -r now

ping 8.8.8.8

3.配置apt-get工具集

1.点击"Ubuntu Software Center"

2.右键图标选择"Software & Updates"

3.源选择 aliyun

4.点击choose

5.输入密码1

6.close(不能点revert

7.终端输入:

sudo apt-get autoclean //清除旧源

sudo apt-get update //更新新源

sudo apt-get install -f //重建软件源依赖关系

3.安装valgrind

sudo apt-get install valgrind

valgrind –help

赞(0)
未经允许不得转载:171主机测评 » c语言基础,常用库函数,内存常见问题的调试方法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址