小技巧:解决C4996警告的一种方法
作者:BlogUpdater |
时间:2017-08-30 |
浏览:2511 |
评论已关闭 条评论
问题:
当我们使用如下的方式调用std::copy函数时:
std::copy(pointer1, pointer1 + size, pointer2);
编译期会给出如下的警告:
warning C4996: ‘std::_Copy_impl’: Function call with parameters that may be unsafe – this call relies on the caller to check that the passed values are correct.
出现这样的警告的原因:
Visual C++默认使用Checked Interators以避免缓冲器溢出,以提高代码安全性。
所谓Checked Interators,实际上是一款增强版迭代器。通过使用Checked Interators,程序在尝试访问容器的边界(越界访问)时,会自动调用invalid_parameter_handler导致程序退出,此举可以帮助开发人员尽可能早的发现错误。
在上面的代码中,直接使用了指针而不是Checked Interators,如果调用者使用精心构造的参数就可能导致访问越界,最终出现远程代码执行漏洞。
所以,编译期给出了警告。
解决方法:
如果明确知道自己在做什么,可以使用如下的方法安全的避免此警告:
在包含STL头文件之前,定义如下宏:
#define _SCL_SECURE_NO_WARNINGS
如需转载,请注明来自:拓扑梅尔智慧办公平台 | TopomelBox 官方站点
- 下一篇: 深度理解:关于WM_SETREDRAW消息的理解
- 上一篇: 小技巧:解决C4251警告的一种方法
相关推荐
- 你需要知道的:WM_WINDOWPOSCHANGED 的隐藏用法
- Posted on 05月27日
- 实战经验:使用IFileOperationProgressSink接收文件操作通知
- Posted on 11月04日
- 长标题: 为调试,启动和CMake工具设置环境变量
- Posted on 11月19日
- 错误信息:Maximum execution time of XX seconds exceeded
- Posted on 05月20日
评论已关闭。