当前位置:  开发笔记 > 编程语言 > 正文

什么C/C++函数最常使用不正确,可能导致缓冲区溢出?

如何解决《什么C/C++函数最常使用不正确,可能导致缓冲区溢出?》经验,为你挑选了2个好方法。

我被要求维护一个充满内存泄漏的大型C++代码库.在探索时,我发现我们有很多缓冲区溢出导致泄漏(它如何变坏,我不想知道).

我决定先从危险函数开始删除缓冲区溢出.哪些C/C++函数最常使用不正确并可能导致缓冲区溢出?

对于用于帮助查找缓冲区溢出的编译器和/或工具,我创建了另一个处理此问题的问题



1> hayalci..:

通常,任何不检查参数中的边界的函数.列表将是

得到()

scanf()函数

的strcpy()

strcat的()

您应该使用大小限制版本,如stncpy,strncat,fgets等.然后在给出大小限制时要小心; 考虑'\ 0'终止字符串.

此外,数组不受C或C++的约束.以下示例将导致错误.看到一个错误

int foo[3];
foo[3] = WALKED_OFF_END_OF_ARRAY;

编辑:@MrValdez,@ Denton Gentry的复制答案


使用strnxxx版本时,请注意它们可能会生成一个非空终止的字符串

2> dicroce..:

Valgrind是你最好的朋友.

valgrind --tool = memcheck --leak-check = full ./a.out

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有