您的位置:首页 > 其它

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

2010-09-04 21:06 246 查看
在C++ primer中,有很多关于new int[10]等语言的描述和例子。 如8.4.3中:

int * pia = new int[104];

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

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

#include <iostream>
#include <vector>
using namespace std;
int main()
{
int array[5];
int* arr = new int[10];

for(int i = 0; i < sizeof(array)/sizeof(int); i++)
{
std::cout << "array value: "<< array[i] << endl;
}

for(int i = 0; i < 10; i++)
{
std::cout << "arr value: " << *arr << "        arr address: " << &arr[i] << endl;
std::cout << "arr new value: " << arr[i]  << "    arr address: " << &arr[i] << endl;

arr++;
}

delete[] arr;
}


我的输出结果是:

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在书中专门如此提到呢?

纳闷中。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐