我被要求维护一个充满内存泄漏的大型C++代码库.在探索时,我发现我们有很多缓冲区溢出导致泄漏(它如何变坏,我不想知道).
我决定先从危险函数开始删除缓冲区溢出.哪些C/C++函数最常使用不正确并可能导致缓冲区溢出?
对于用于帮助查找缓冲区溢出的编译器和/或工具,我创建了另一个处理此问题的问题
通常,任何不检查参数中的边界的函数.列表将是
得到()
scanf()函数
的strcpy()
strcat的()
您应该使用大小限制版本,如stncpy,strncat,fgets等.然后在给出大小限制时要小心; 考虑'\ 0'终止字符串.
此外,数组不受C或C++的约束.以下示例将导致错误.看到一个错误
int foo[3]; foo[3] = WALKED_OFF_END_OF_ARRAY;
编辑:@MrValdez,@ Denton Gentry的复制答案
Valgrind是你最好的朋友.
valgrind --tool = memcheck --leak-check = full ./a.out