我正在使用从 Visual C++ 6.0 移植到 VC++ 9.0 (2008) 的遗留代码。_CRT_SECURE_NO_WARNINGS
我使用预处理器定义禁用了安全 CRT 警告。但这导致std::vector
析构函数崩溃。
使用中有什么问题_CRT_SECURE_NO_WARNINGS
吗?
我正在使用从 Visual C++ 6.0 移植到 VC++ 9.0 (2008) 的遗留代码。_CRT_SECURE_NO_WARNINGS
我使用预处理器定义禁用了安全 CRT 警告。但这导致std::vector
析构函数崩溃。
使用中有什么问题_CRT_SECURE_NO_WARNINGS
吗?
这些都是不相关的问题。_CRT_SECURE_NO_WARNINGS
仅抑制弃用警告,不会改变程序行为。您必须调试实际问题。
它是如何崩溃的?这听起来更像是你在一个位置有内存覆盖你的向量中的内存,然后在你的向量被释放之前释放它。我会寻找任何有指针的地方。由于您现在使用的是符合标准的编译器,因此将它们替换为 boost 共享指针或 boost 数组。在迭代器使用起来更安全的情况下,可以消除对指针运算的需求。
您绝对是需要快速而肮脏的解决方案的人之一,只是为了“让它发挥作用”。不好的做法。不要定义隐藏警告的指令,而是/W4
在代码中启用所有警告(级别 4 - )并努力删除所有警告。通过删除所有可能的警告和由它们引起的副作用,使您的代码更加健壮。
VC6 和最新的 VC 编译器之间存在巨大差异——在 VC6 中完美运行的东西现在可能无法运行,这不是最新编译器的错,而是你的代码的错。编译器/调试器有助于及早发现缺陷(在开发/调试阶段)。
我还建议你运行一些静态分析(/analyze
如果你有的话,比如在更高版本的 Visual Studio 中使用 switch 进行代码分析)。您还应该对代码运行动态代码分析以发现更多问题。