According to my reading of ISO 14882 section 5.3.4 paragraph 15, arrays initialized with 'new' and a trailing '()' should be 'default-initialized'.
According to section 8.5 paragraph 5, the definition of 'default-initialized' for an array is that each entry in the array should be 'zero-initialized'. This used to be the case in 3.2.2, but is not the case in 3.4.3. The following program demonstrates the problem: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { // dirty heap so that initialized data shows up char *string = (char *)malloc(sizeof"hello"); strcpy (string, "hello"); printf ("here: %s\n", string); free (string); // i[0] and i[1] should both be zero when the following // line contains () and something else whn it does not. int *i = new int [2] (); printf ("%p, %d, %d\n", i, i[0], i[1]); return 0; } -- Summary: 'new int [2] ()' not default initialized Product: gcc Version: 3.4.3 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: andrew dot stubbs at st dot com CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20427