关于new创设动态数组时初始化的困惑
关于new创建动态数组时初始化的困惑
int main()
{
int *pia2 = new int[10]();
int *a = new int [10];
cout<<*pia2<<endl;
cout<<*a<<endl;
delete [] pia2;
delete [] a;
return 0;
}
嗯,书上说在数组后面跟一对圆括号,对数组元素做值初始化,且是把数组元素都设置为0。可查看*pia2时,不是0,而是一个别的数,vc6.0上是-842150451.而且与*a的值是一样的。而a指向的数组时没有初始化的,这是怎么回事呢?难道是机器问题吗。
------解决方案--------------------
------解决方案--------------------
珍惜生命,远离VC6.
------解决方案--------------------
是标准改变了,何况VC和标准始终有些差距。
------解决方案--------------------
工具有缺陷就不干活了?
有人用有缺陷的工具制造出近乎完美的作品;
有人用近乎完美的工具制造出有缺陷的作品。
------解决方案--------------------
VS2005
*pia2: 0 (已经完成初始化,你的没有初始化,应该是VC6.0的问题)
*a : 0xcdcdcdcd(-842150451) (没有初始化的值)
------解决方案--------------------
大牛的话好精辟
------解决方案--------------------
一开始还没注意这个问题~
int main()
{
int *pia2 = new int[10]();
int *a = new int [10];
cout<<*pia2<<endl;
cout<<*a<<endl;
delete [] pia2;
delete [] a;
return 0;
}
嗯,书上说在数组后面跟一对圆括号,对数组元素做值初始化,且是把数组元素都设置为0。可查看*pia2时,不是0,而是一个别的数,vc6.0上是-842150451.而且与*a的值是一样的。而a指向的数组时没有初始化的,这是怎么回事呢?难道是机器问题吗。
vc
------解决方案--------------------
T *p = new T;
T *p = new T(); // 这个才初始化。
T *p = new T[N];
for (int i = 0; i < N; ++i)
{
new (p + i)T();
}
------解决方案--------------------
珍惜生命,远离VC6.
------解决方案--------------------
是标准改变了,何况VC和标准始终有些差距。
------解决方案--------------------
工具有缺陷就不干活了?
有人用有缺陷的工具制造出近乎完美的作品;
有人用近乎完美的工具制造出有缺陷的作品。
------解决方案--------------------
VS2005
*pia2: 0 (已经完成初始化,你的没有初始化,应该是VC6.0的问题)
*a : 0xcdcdcdcd(-842150451) (没有初始化的值)
------解决方案--------------------
大牛的话好精辟
------解决方案--------------------
一开始还没注意这个问题~