
上QQ阅读APP看书,第一时间看更新
2.4.1 字符串处理
《C安全编码标准》[Seacord 2008].“STR01-C.采用并实现一个管理字符串的一致计划”建议选择一种方法来处理字符串并在项目中始终如一地执行。否则,决定权就落到了单个程序员身上,他们很可能采取不同、不一致的方法。可以根据字符串处理函数如何管理内存将它们归类。下面是3个基本模型:
·由调用者分配,由调用者释放(C99.OpenBSD.C11 Annex K)
·由被调用者分配,由调用者释放(ISO/IEC TR 24731-2)
·由被调用者分配,由被调用者释放(C++std::basic_string)
第一个模型是否比第二个模型更安全这点存在争议,反之亦然。第一个模型使得何时需要释放内存这点更加清晰,并且似乎更能防止泄漏,但第二个模型确保有足够的内存可用(除非调用malloc()失败)。
第3种内存管理模式,其中被调用者既分配又释放内存,它是三种解决方案中最安全的一种,但只能在C++中使用。