场景
- 在开发
C/C++
程序时,通常情况下,如果需要传递数据给其他线程,那么传递的类型就需要创建在堆上。 即使用malloc
和new
来创建指针对象,而安全编程最需要回避的就是操作指针。指针对象是需要手动管理释放的,这也可能造成内存安全问题。 比如悬垂指针,对象释放后再使用。那么有什么办法可以避免出现悬垂指针呢?
说明
-
C/C++
的编译器在Rust
出现以前还没考虑过代替工程师检查代码安全的问题。代码的安全完全靠C/C++
开发者的自觉和水平。一个要求代码质量高的C++
项目,开发完之后还需要各种静态分析工具Clang-Tidy,Cppcheck
,动态分析工具Valgrind,AddressSanitizer
等进行扫描才能去除90%
的内存安全错误。相对Rustc
的编译即检查麻烦很多,因为这些外部工具也是要安装的,如果是版本高了,还不支持开发所用的系统。 -
C/C++
的内存安全问题就是避免出现未定义行为,避免使用指针。其中未定义行为希望新版的标准能检测出来,不过那都是之后的事。通常C/C++
的项目都是使用了不同的C++
标准的,比如老项目也支持C++11
标准,而新项目支持C++20