最近C++开发过程中遇到的一些坑
来源:互联网 发布:windows高级编程 编辑:程序博客网 时间:2024/05/18 15:25
1. 对齐引发的bug
最近在移植一个项目代码,发现编译后报字节长度和客户端定义的长度不对,但是代码是直接移植过来的为什么会不对:
struct Head{ uint32_t a; uint32_t b; uint32_t c; uint32_t d; uint32_t e; uint32_t f; uint32_t g; uint32_t h; uint64_t i; uint64_t j; char k[32]; uint32_t l;};
理论上sizeof(Head) = 84, 但是移植到新的项目却等于88,代码没有任何改动,原封不动地移植过来,一开始以为是编译选项的问题,后面才恍然大悟是字节对齐问题。
默认是用8字节对齐的,最后一个uint32_t l;
刚好变单数了又补齐了4个字节进行对齐,唉,最基本的基础知识都忘了,解决方法强制使用1字节对齐:
#pragma pack(1)struct Head{ uint32_t a; uint32_t b; uint32_t c; uint32_t d; uint32_t e; uint32_t f; uint32_t g; uint32_t h; uint64_t i; uint64_t j; char k[32]; uint32_t l;};#pragma pack()
2. 诡异coredump点
开发的过程中,有时随便改动一个很小的点却引发各种莫名奇怪的coredump点,进过折腾发现是编译时没有make clean
,比如
|-- include| |-- include.h|-- comm| |-- makefile| |-- comm.cpp| |-- comm.h|-- svr| |-- makefile| |-- svr.cpp| |-- svr.h
comm.cpp
和svr.cpp
都引入include.h
文件,comm
目录编译出.a
静态库被svr引用,如果修改了include.h
没有重新在comm目录make clean
编译出新的静态库,只重新编译svr目录,那么就会引发coredump。
3. 引入libevent使用hiredis异步功能编译错误
我们都知道redis有发布订阅功能,对应c/c++引入这种功能,需要引入libevent库
编译hiredis 发布订阅libevent
In file included from /data/test/test_redis_sub.cpp:7:0: /data/test/../dep/hiredis-master/adapters/libevent.h:39:18: error: field 'rev' has incomplete type struct event rev, wev; ^ /data/test/../dep/hiredis-master/adapters/libevent.h:39:23: error: field 'wev' has incomplete type struct event rev, wev;
4. 进程一启动cpu一直100%
进程一启动cpu一直100%,通过ptrace/gdb各种工具看进程都正常,最后看代码发现是一个异步日志初始化了两次,怀疑是内部加锁,还没时间深究?
0 0
- 最近C++开发过程中遇到的一些坑
- 最近oracle开发中遇到的一些问题及解决办法(四):调试存储过程--待续
- 最近这段时间开发过程中遇到的一些细节问题汇总
- 开发过程中遇到的一些问题
- 最近开发中遇到的一些怪事情
- 最近开发过程中遇到的SQL语句
- 给大家分享一下最近开发遇到的一些坑
- ios中最近遇到的一些问题
- 项目中最近遇到的一些bug
- 开发时间过程中遇到的一些问题
- android开发过程中遇到的一些问题汇总
- 一些开发ssh2过程中遇到错误的解决办法
- 开发过程中遇到的一些细节问题
- Android开发过程中遇到的一些小问题
- ssh开发过程中遇到的问题,以及一些解决办法
- JAVAEE开发过程中遇到的一些问题
- ios开发学习过程中遇到的一些问题
- 开发Web服务过程中遇到的一些问题
- 百度地图启动页跳转主界面闪屏问题
- Java中用单例模式有什么好处
- Elasticsearch 5 Ik+pinyin分词配置详解
- websocket实现数据库更新时前端页面实时刷新
- qt开发强烈建议参考的技术博客
- 最近C++开发过程中遇到的一些坑
- POJ 1132 Border 笔记
- 欢迎使用CSDN-markdown编辑器
- eclipse 和 androidstudio 快捷键对比
- 使用float浮动之后,父元素“塌陷”的解决办法
- PyQt4调用partial函数绑定多个信号到相同slot源码实例
- 阿里云ESC Nginx下为WordPress添加伪静态规则
- Spring Cloud微服架构之分布式配置中心
- Micropython加速物联网开发4