小技巧:解决C4996警告的一种方法
作者:BlogUpdater |
时间:2017-08-30 |
浏览:3244 |
评论已关闭 条评论
问题:
当我们使用如下的方式调用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警告的一种方法
相关推荐
- 第 625 期:微软提升文件资源管理器的速度并修复暗黑模式问题
- Posted on 04月20日
- 第 924 期:IDC 表示,由于苹果效应,Windows 11的运行会更好
- Posted on 08月06日
- 第 586 期:微软确认 Windows 11 暗黑模式将覆盖更多窗口
- Posted on 03月31日
- /3GB开关并不能映射一个3GB大小的内存
- Posted on 09月15日



评论已关闭。