[問題] new int array的初始值

看板C_and_CPP作者 (Lucius)時間15年前 (2010/09/06 00:22), 編輯推噓5(5030)
留言35則, 9人參與, 最新討論串1/1
int* ptr = new int[10](); for(int i=0; i!=10; i++) cout<<ptr[i]<<endl; 為什麼得到的是垃圾值呢? ()不是會將元素初始化為零嗎.. 使用的是Dev-C++ 4.9.9.2 煩請賜教 謝謝:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.162.80.111 ※ 編輯: jehovah 來自: 218.162.80.111 (09/06 00:23)

09/06 00:25, , 1F
()不是會將元素初始化為零嗎 <== 有這回事?
09/06 00:25, 1F

09/06 00:26, , 2F
呃,我用 VC++ 2008 確實都有初始為零 XD
09/06 00:26, 2F

09/06 00:29, , 3F
試了一下,用gcc 4.4.3也會全零,所以問題是....?
09/06 00:29, 3F

09/06 00:31, , 4F
看了內文和推文~猜測是compiler的不同的原因(猜測)
09/06 00:31, 4F

09/06 00:40, , 5F
這,我沒有()也會是零阿...有定義說()會初始?
09/06 00:40, 5F

09/06 00:58, , 6F
primitive type加()有定義會初始為零吧? 沒有的話是未知數
09/06 00:58, 6F

09/06 00:59, , 7F
所以才能讓template<typename T> foo(T x = T())這種用法
09/06 00:59, 7F

09/06 00:59, , 8F
也適用於primitive type
09/06 00:59, 8F

09/06 01:01, , 9F
我是看c++ primer 4/e寫到new內建型別在global初值為0
09/06 01:01, 9F

09/06 01:02, , 10F
在scope中則不會初始化, 除非接上空括號()
09/06 01:02, 10F

09/06 01:04, , 11F
試過new int()值是0, 但是new int[x]()就無效..
09/06 01:04, 11F

09/06 01:06, , 12F
我在gcc 4.5中測是會全部初始為零的說...
09/06 01:06, 12F

09/06 01:09, , 13F
你用的compiler是?
09/06 01:09, 13F

09/06 01:13, , 14F
我沒加 () 在VC是垃圾值 在gcc仍然全零 真怪...
09/06 01:13, 14F

09/06 01:14, , 15F
在gcc全零純粹是運氣問題吧~剛好裡面的垃圾是零而已XD
09/06 01:14, 15F

09/06 01:15, , 16F
我用char、int、long、float、double都測過 沒加是垃圾值
09/06 01:15, 16F

09/06 01:15, , 17F
加了全變成零...in gcc
09/06 01:15, 17F

09/06 01:35, , 18F
規格書中的 new expression 並沒有這樣的形式喔~ gcc
09/06 01:35, 18F

09/06 01:35, , 19F
可以應該是額外的擴充吧
09/06 01:35, 19F

09/06 01:46, , 20F
我加上-ansi -pedantic -Wall也都沒有任何error/warning
09/06 01:46, 20F

09/06 01:46, , 21F
而且行為也一樣... 所以我以為是標準規定的XD
09/06 01:46, 21F

09/06 02:19, , 22F
剛看了一下規格書 應該是有這種形式吧?
09/06 02:19, 22F

09/06 02:20, , 23F
new-expression -> new new-type-id new-initializer
09/06 02:20, 23F

09/06 02:21, , 24F
new type-specifier new-declarator new-initializer
09/06 02:21, 24F

09/06 02:23, , 25F
->new type-specifier direct-new-declarator new-initial
09/06 02:23, 25F

09/06 02:23, , 26F
izer
09/06 02:23, 26F

09/06 02:23, , 27F
->new type-specifier [expression]()
09/06 02:23, 27F

09/06 02:25, , 28F
嗯嗯看錯了, 忘記把 new-type-id 給換掉 XD
09/06 02:25, 28F

09/06 02:32, , 29F
嗯嗯 再加上15條的value-initialized
09/06 02:32, 29F

09/06 02:32, , 30F
array的value-initialized是對每個element做value-initial
09/06 02:32, 30F

09/06 02:33, , 31F
而scalar type的value-initialize= zero-initialize=0
09/06 02:33, 31F

09/06 03:11, , 32F
DevC++內附的Mingw gcc是3.4.2耶= = 麻煩你放棄它好嗎XD
09/06 03:11, 32F

09/06 07:54, , 33F
記得VC的debug mode會初始化array為0, release mode
09/06 07:54, 33F

09/06 07:55, , 34F
則不會...
09/06 07:55, 34F

10/12 21:17, , 35F
規格書應該是有new[]()的形式喔 @@prime有
10/12 21:17, 35F
文章代碼(AID): #1CWyFPPu (C_and_CPP)