PRB: AllocMemoryDebug Gives Assertion or Trace Error on New[0]Last reviewed: July 10, 1997Article ID: Q125309 |
1.00 1.50 1.51 | 1.00
WINDOWS | WINDOWS NTkbprg kbprb The information in this article applies to:
The Microsoft Foundation Classes (MFC), included with: - Microsoft Visual C++ for Windows, versions 1.0, 1.5, and 1.51 - Microsoft Visual C++, 32-bit Edition, version 1.0
SYMPTOMSIf new is called to allocate an array whose size is determined by a variable that has a value of zero (0), the program terminates with the following message in a debug build:
Assertion Failed! <name> Windows Application:File Afxmem.cpp, Line <line>The <line> value depends on the version of MFC that you have:
Warning: Allocating zero length memory block. RESOLUTIONThis behavior changed with the introduction of Visual C++ version 2.0. In the MFC that shipped with version 2.0, a TRACE is output to the Debug Window in Debug mode. If you encounter the assertion failure, you can work around it by simply not calling new for a zero-length array. Check for a zero value before calling new. If you need to have a valid address for the memory block, allocate an array of size 1 as in new[1].
STATUSThis behavior is by design. It is intended to help programmers detect logic errors in programs.
MORE INFORMATIONThe run-time operator new() can be called with the argument zero. A distinct (non-null) pointer to an object will be returned. (See Section 5.3.3, third paragraph of the ARM - M.A.Ellis, B.Stroustrup.) This is the behavior of Visual C++ versions 2.x and 4.0. However, Visual C++ version 4.0 does not warn when new() is called with a zero size. It is the programmer's responsibility to ensure the pointer returned by new() is of the appropriate size.
Sample Code
/* Compile options needed: Default MFC App. */ int size=0; char * p = new char[size]; // With MFC 2.51 or earlier, this causes an Assert to be thrown // With MFC 3.x this causes a TRACE warning |
Additional reference words: 1.00 1.50 2.00 2.10 2.50 2.51
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |