FIX: C2466: Using New to Allocate an Array of Size Zero

ID: Q123811


The information in this article applies to:
    • Microsoft C/C++ Compiler (CL.EXE)
    • Microsoft C/C++ for MS-DOS, version 7.0
    • Microsoft Visual C++ for Windows, versions 1.0, 1.5, 1.51
    • Microsoft Visual C++ 32-bit Edition, version 1.0


SYMPTOMS

If a constant expression that evaluates to zero is used to allocate an array, the following error occurs:

error C2466: cannot allocate an array of constant size 0


RESOLUTION

To work around the problem, use a variable that is initialized to zero in place of the constant when allocating the array.


STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++, 32-bit Edition, version 2.0.


MORE INFORMATION

The 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 of the ARM - M.A.Ellis, B.Stroustrup). This is the behavior observed with Visual C++ version 2.0.

The following sample code can be used to demonstrate the problem.

Sample Code to Reproduce Problem


/* Compile options needed: none
*/ 

char * p = new char[0];  // Causes C2466 

Additional query words: 1.00 1.50 7.00 8.00 8.00c

Keywords : kbCompiler kbCPPonly kbVC
Version :
Platform : MS-DOS NT WINDOWS
Issue type :


Last Reviewed: February 2, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.