邪恶八进制信息安全团队技术讨论组's Archiver

EvilOctal 2005-6-27 01:53

[转载]不要让内存分配失败导致您的旧版 STL 应用程序崩溃

文章作者:James Hebben
信息来源:[url]http://www.microsoft.com/china/msdn/library/security/LegacySTLFix.mspx[/url]

本文假设您熟悉 C++、STL 和 MFC

下载本文的代码: LegacySTLFix.exe (111KB)

摘要

大多数 C++ 开发人员在他们的代码中都广泛使用了标准模块库 (STL)。如果您是其中的一员,并且正在直接使用即装即用的 STL 和 Visual C++ 6.0,则在内存不足的条件下,您的应用程序就处于崩溃的高度危险的状况下。产生此问题的原因是,检查运算符 new 是否失败是一种非常少见的做法。更糟糕的是,当 new 确实失败时,响应不是标准的。有些语言编译器返回 NULL,而其他语言则引发异常。

另外,如果您正在 MFC 项目中使用 STL,要注意 MFC 有其自己的规则集。本文将讨论这些问题,说明如何更改 Visual C++ .NET 2003 中的默认行为,并概述了如果使用 Visual C++ 6.0 所必须进行的更改,这样当运算符 new 失败时,您就可以安全地使用 STL 了。

有多少开发人员检查运算符 new 是否失败?有必要总是检查失败吗?我见过大型、复杂的用 Visual C++

页: [1]
© 1999-2008 EvilOctal Security Team