定义_CRT_SECURE_NO_WARNINGS导致向量析构函数崩溃

时间:2011-08-19 11:08:44

标签: c++ visual-c++ stl vc6 msvcrt

我正在使用从Visual C ++ 6.0移植到VC ++ 9.0(2008)的遗留代码。我使用_CRT_SECURE_NO_WARNINGS预处理器定义禁用了安全CRT警告。但这导致std::vector析构函数崩溃。

使用_CRT_SECURE_NO_WARNINGS的任何问题?

3 个答案:

答案 0 :(得分:1)

那些是不相关的问题。 _CRT_SECURE_NO_WARNINGS仅抑制弃用警告,它不会更改程序行为。你必须调试实际问题。

答案 1 :(得分:1)

它是如何崩溃的?这听起来更像是你在一个位置有内存覆盖你的向量中的内存,然后在你的向量被释放之前释放它。我会指向任何有指针的地方。由于您现在使用符合标准的编译器,因此请使用boost共享指针或boost数组替换它们。任何消除指针运算的需要,迭代器使用起来会更安全。

答案 2 :(得分:1)

你肯定是其中一个需要快速和肮脏的解决方案,只是为了“让它工作”任何方式。糟糕的做法。不要定义指令来隐藏警告,而是在代码中启用所有警告(级别4 - /W4)并努力删除所有警告。通过删除由它们引起的所有可能的警告和副作用,使您的代码更加健壮。

VC6和最新的VC编译器之间存在巨大差异 - 在VC6中完美运行的功能现在可能无法正常工作,并且它不是最新编译器的错误,而是代码的错误。编译器/调试器正在帮助早期找到漏洞(在开发/调试阶段)。

我还建议您运行一些静态分析(如使用/analyze开关的Visual Studio的更高版本中的代码分析,如果有的话)。您还应该对代码运行动态代码分析以查找更多问题。