通过分析真实C++代码中的bug,深入理解C++语言特性的训练仓库
这是一个专为C++开发者设计的训练仓库,通过分析实际代码中容易出现的bug,帮助开发者:
- 🔍 深入理解 C++语言的核心特性
⚠️ 识别常见陷阱 和编程错误- 💡 掌握最佳实践 和解决方案
- 📚 系统化学习 C++的各个知识点
- 📋 16个精选Bug案例 - 涵盖从基础到高级的各类问题
- 🎯 分类索引系统 - 按C++特性分类,便于查找和学习
- 🛤️ 学习路径指南 - 提供推荐的学习顺序和难度分级
- 💻 完整源代码 - 每个bug都配有可运行的示例代码
- 📝 详细解析 - 包含问题分析、正确写法和要点总结
- 🔗 拓展阅读 - 提供相关资源的链接
方式一:按主题学习(推荐)
- 查看 分类索引,按C++特性分类浏览
方式二:按难度学习
- 查看 学习路径,从基础到高级循序渐进
方式三:直接浏览
- 从下面的详细内容中选择感兴趣的bug
每个bug都提供了完整的源代码示例,你可以:
- 在线运行:复制
source/bugXXX/source/main.cpp中的代码到 Online GDB 运行 - 本地编译:使用你喜欢的C++编译器(GCC、Clang、MSVC等)编译运行
- 先看问题:尝试自己找出bug,不要先看答案
- 运行代码:实际运行代码,观察行为
- 理解原理:深入理解为什么会出现这个问题
- 实践应用:在自己的代码中应用学到的知识
| 文档 | 说明 |
|---|---|
| 📑 分类索引 | 按C++特性分类查看所有bug |
| 🛤️ 学习路径 | 推荐的学习顺序和难度分级 |
| ❓ 常见问题 | 野指针、内存对齐等常见问题 |
| Bug | 标题 | 难度 | 知识点 |
|---|---|---|---|
| Bug101 | 数组尺寸 | ⭐⭐ | 数组参数退化、引用传递 |
| Bug102 | 整数除法问题 | ⭐ | 整数除法、类型转换 |
| Bug201 | 空字符串检查 | ⭐⭐ | 指针解引用、空指针检查 |
| Bug301 | 运算符优先级 | ⭐ | 运算符优先级、后置递增 |
| Bug302 | if-else 悬挂问题 | ⭐ | if-else匹配规则、代码风格 |
| Bug303 | 无符号数循环 | ⭐⭐ | 无符号整数、循环条件 |
| Bug | 标题 | 难度 | 知识点 |
|---|---|---|---|
| Bug401 | 数组越界 | ⭐⭐ | 数组边界、sizeof操作符 |
| Bug403 | 清空结构内存 | ⭐⭐ | sizeof操作符、指针与对象 |
| Bug502 | 内存泄漏 | ⭐⭐⭐ | 动态内存管理、RAII、智能指针 |
| Bug505 | 悬空引用 | ⭐⭐⭐ | 引用生命周期、对象生命周期 |
| Bug | 标题 | 难度 | 知识点 |
|---|---|---|---|
| Bug504 | 未初始化变量 | ⭐⭐ | 变量初始化、默认初始化 |
| Bug506 | 类型转换问题 | ⭐⭐⭐ | 类型转换、static_cast、dynamic_cast |
| Bug542 | 指定长度的整形数 | ⭐⭐⭐ | 位域、有符号整数、补码 |
| Bug | 标题 | 难度 | 知识点 |
|---|---|---|---|
| Bug601 | 运算符重载返回引用 | ⭐⭐⭐ | 运算符重载、返回值类型、RVO |
| Bug602 | 注释使用 | ⭐⭐ | 注释语法、词法分析 |
| Bug604 | 宏的使用 | ⭐⭐ | 宏定义、文本替换、运算符优先级 |
- 总Bug数量: 16个
- 分类数量: 7个主要分类
- 源代码示例: 16个完整示例
- 难度分布:
- ⭐ 入门级: 3个
- ⭐⭐ 初级: 8个
- ⭐⭐⭐ 中级: 5个
- Online GDB - C++在线编译调试工具(推荐)
- Compiler Explorer - 查看编译器生成的汇编代码
- C++ Insights - 查看C++代码的编译器视角
- 编译器: GCC、Clang、MSVC
- IDE: Visual Studio、CLion、Code::Blocks
- 静态分析工具: PVS-Studio、Clang Static Analyzer
欢迎加入我们的社区,一起学习交流!
| 平台 | 链接 |
|---|---|
| QQ群 | 242500383 ![]() |
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
感谢所有为这个项目做出贡献的开发者!
⭐ 如果这个项目对你有帮助,请给个Star支持一下!⭐
Made with ❤️ by C++ Developers
