我和一个few thousand other people,正在收到Microsoft Visual C ++运行时抛出的错误:
为了搜索引擎的利益,说:
Microsoft Visual C++ Runtime Library
Buffer overrun detected!
Program: %s
A buffer overrun has been detected which has corrupted the program's
internal state. The program cannot safely continue execution and must
now be terminated.
现在我明白缓冲区溢出是什么,以及为什么它是一件坏事。鉴于微软新近强调“它刚刚崩溃”,在 MSVCRT 中额外的缓冲区检查可能是一件好事。
另一方面,我不在乎。并不是程序无法继续,而是程序无法安全继续。好吧,我宁愿不安全,因为它总比没有好。我喜欢危险地生活。
所以有人可以提出任何建议吗?我在考虑这样的事情:
我尝试搜索编写 Microsoft Visual C ++运行时库的公司的支持网站,但他们没有提到哪些功能可能溢出,或者如何禁用溢出检查。
答案 0 :(得分:9)
这里有一个选项。将其设为否。
项目属性 - >配置属性 - > C / C ++ - >代码生成 - >缓冲区安全检查。
这对应于/GS (Buffer Security Check) 编译器选项:
检测到一些缓冲区溢出 覆盖返回地址,一个常见的 利用代码的技术 不强制执行缓冲区大小 限制。这是通过 注入安全检查 编译代码。
答案 1 :(得分:1)
这是发生在您的代码中还是实际上在库中?如果它在库中,我知道你说你只想忽略错误,但如果是一个崩溃进程的访问冲突,你会怎么做?
你应该以同样的方式对待它,因为逻辑上它是一样的。只是CRT正在崩溃而不是操作系统。
但是,如果您正在使用库的调试版本,那么使用版本构建可能会获得更好的(?)结果(可能只是在没有对话框通知的情况下崩溃)。
如果它在您的代码中,您可以使用/ GS-选项禁用溢出检查。但是你应该真正解决这个问题。