一个int数组内存初始化的讨论

来源:互联网 发布:卖掉淘宝店铺的危险 编辑:程序博客网 时间:2024/05/22 11:57

 

在C++ primer中,有很多关于new int[10]等语言的描述和例子。 如8.4.3中:

 

int * pia = new int[104];

 

pia是一个指向1024的int类型的数组的指针,而这个数组中,所有的数据都是没有被初始化过的。

然而,我的例子程序显示,整个数组时被初始化过的,莫非是编译器相关?

 

 

我的输出结果是:


ewuming@cnshc0032 []: g++ -o a.out array.cc
ewuming@cnshc0032 []: ./a.out
array value: 1074592164
array value: 1074588840
array value: -1073748456
array value: 134515377
array value: 1073834604
arr value: 0        arr address: 0x804a008
arr new value: 0    arr address: 0x804a008
arr value: 0        arr address: 0x804a010
arr new value: 0    arr address: 0x804a010
arr value: 0        arr address: 0x804a018
arr new value: 0    arr address: 0x804a018
arr value: 0        arr address: 0x804a020
arr new value: 0    arr address: 0x804a020
arr value: 0        arr address: 0x804a028
arr new value: 0    arr address: 0x804a028
arr value: 0        arr address: 0x804a030
arr new value: 0    arr address: 0x804a030
arr value: 0        arr address: 0x804a038
arr new value: 0    arr address: 0x804a038
arr value: 0        arr address: 0x804a040
arr new value: 0    arr address: 0x804a040
arr value: 0        arr address: 0x804a048
arr new value: 0    arr address: 0x804a048
arr value: 0        arr address: 0x804a050
arr new value: 0    arr address: 0x804a050
*** glibc detected *** free(): invalid pointer: 0x0804a030 ***
ewuming@cnshc0032 []: which g++
/usr/bin/g++
ewuming@cnshc0032 []: which g++
ewuming@cnshc0032 []: g++ -v
Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.3/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++,f77,objc,java,ada --disable-checking --libdir=/usr/lib --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i586-suse-linux
Thread model: posix
gcc version 3.3.3 (SuSE Linux)

 

 

在使用传统c语言的编程方法(int array[5];)中,这个是可以理解的,普通的数组都是没有被初始化过的。

在使用C++语言的编程方法(int* arr = new int[10];)中,我觉得应该是所有数据都是被初始化过的。

这样,为什么Lippman在书中专门如此提到呢?

 

纳闷中。。。。。