c++开发中常见bug总结(不定期更新)
来源:互联网 发布:php简历真实 编辑:程序博客网 时间:2024/04/29 07:42
尽管平时千叮咛万嘱咐,可是低级错误总是不可避免的会在程序开发过程中出现:
因此博主记录自己开发过程中出现过的错误,以便后期参考和总结:
1. 通过指针加下标访问数组
我自己写的一段代码,通过结构体指针p_structA 逐个访问结构体数组A,A大小为3,
指针初始化, p_structA = &A
循环中通过加循环索引值index(从0开始), p_structA = p_structA + index (问题便出在这!!!)
分析:我注意到问题的时候是因为每次取第三个结构体值时,总是取不到,可是原结构体的值已经存在了,因此肯定是访问的时候出了问题。
显然,第一次index的值为0,访问第一个结构体数组元素正确,p_structA 指向A的第一个元素
第二次index的值为1,访问第二个结构体数组元素正确,p_structA 指向A的第二个元素
第三次index的值为2,访问第三个结构体元素失败,p_structA指向未知区域,因为A只有三个元素!
解决办法是申明另外一个相同指针p_structA 2,每次赋值为p_structA + index ,而不是每次改变p_structA
2. 字符数组长度太小,造成程序崩溃
这次是调试守护进程的时候,调试大半天了,一直不知道原因出在哪儿,有以下几个特征:
(1)它在执行完一个子函数之后本地日志便再无更新(进程因为异常退出了)
(2)之前偶然出现过一次异常现象:字符串输出时打印出了未知符号,
CTO大神过来看了,三五分钟检查到有一个字符数组长度设太小,导致字符串溢出异常,
太小的原因是,输出的字符串是路径信息,导致总的字符过多,并且使用了sprintf,而非snprintf,
3. strncpy字符块拷贝,拷贝结果不完全
这也算是字符操作的陷阱之一,在拷贝流媒体数据时,比如视频流、音频流等数据,因为不可避免的碰到大量的'\0'字符,
所以当使用strncpy进行字符块拷贝时,一旦遇到'\0'字符,便会结束拷贝,解决的办法便是选用memcpy,来执行拷贝。
4. linux环境下进行源程序的编译
(1)第一次编译后,可以成功运行。
(2)重新启动了下系统, 编译另外一个程序,执行时出现权限错误,查看文件属性,发现对当前用于没有可执行的权限
(3)用chmod a+x filename(当前目录)改变文件的可执行权限,再次执行,出现cannot execute binary file错误
(4)遂百度百度百度,找到了蛛丝马迹, 原来是编译的时候用错了格式,
正确的编译程序是 gcc sourcefile -o outputfile
我的错误格式: gcc -c sourcefile -o outputfile
5. 文件保存(针对视频流裸流解析,hik(海康) ipc(网络摄像头))
这个错误是我自己给自己挖的一个巨坑,拖着CTO解决了近一个星期,把自己都快整抑郁了,
这是在调试网络摄像头网RTMP服务器推流时,为了排除取流时出错的可能性,用写文件的方式把从海康摄像头里面剥离的h264数据保存成本地文件,
这个bug就出在这里,因为视频数据写入文件必须用二进制的方式来写,这样获得的h264数据才能正常播放, 而我根本没注意到这个问题的严重性,选择了初学者最常用的字符方式写入文件,导致h264文件无法正常用vlc播放器查看,但最坑爹的是,播放器解析出来的各项参数都是正确的,唯独视频画面像瀑布一样
6. libevent使用bug
在使用evhttp_add_header以及evbuffer_add_printf时,出现http请求体出现重复,出现此bug的代码:
evbuffer_add_printf(req->output_buffer, header.c_str()); evhttp_add_header(req->output_headers, "Host", evhttp_uri_get_host(uri));
evbuffer_add_printf(req->output_buffer, header.c_str()); std::string tmp = evhttp_uri_get_host(uri); evhttp_add_header(req->output_headers, "Host", tmp.c_str());
7. 文件路径出现空格
这个bug我检查了两天左右,一直在其他问题上面走死胡同。我当时是为了做测试,
把路径信息包括文件名手工copy进去数据库中,应该是在copy过程中不知道怎么混进去一个空格!
给我这一顿思考!!!!
8. 析构函数指针释放错误
在一个析构函数里面,把条件设为 if(NULL == m_pHttpServer) Free(m_pHttpServer), 这个在执行到main函数结尾时报错,
libc-start.c: No such file or directory,然后用gdb一直单步调试(s),最后发现是这个语句错了,空指针还去释放,这不是没事找事么!
真想痛扁自己!
- c++开发中常见bug总结(不定期更新)
- c++开发中常见bug总结(不定期更新二)
- 微信小程序bug总结, 不定期更新
- Symbian开发bug体验录(不定期更新)
- C语言不常见代码(不定期更新)
- STL总结(不定期更新...)
- Android 开发中常见bug 总结
- node.js开发中遇到的问题(不定期更新)
- 常见背景音(不定期更新)
- MFC 常见错误(不定期更新)
- Spring MVC常见bug总结----持续更新中
- ubuntu常见不常见用法(不定期更新)
- HQL语句用法总结(不定期更新)
- android-listview的总结(不定期更新)
- node.js学习总结(不定期更新)
- java的一些总结(不定期更新)
- css3 常用命令总结(不定期更新)
- 名词概念总结(不定期更新~~)
- Unity 截屏功能(安卓、IOS)
- Java笔试面试题整理第五波
- 【Hibernate】初入门上手实例
- CentOS6.4编译安装iftop监控网卡流量
- 1015. Reversible Primes (20)
- c++开发中常见bug总结(不定期更新)
- LCD的接口类型详解,及接口的转换方案
- 每天一个 Linux 命令(39):grep 命令
- Java Tomcat SSL 服务端/客户端双向认证のApache HttpClient(二)
- 算法第二周作业05
- minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析
- 浅谈CSS的visibility: hidden | collapse 与display: none
- apache相关问题
- josephus问题->不带头节点的循环链表