看板 C_and_CPP 關於我們 聯絡資訊
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)
james732:()不是會將元素初始化為零嗎 <== 有這回事? 09/06 00:25
james732:呃,我用 VC++ 2008 確實都有初始為零 XD 09/06 00:26
james732:試了一下,用gcc 4.4.3也會全零,所以問題是....? 09/06 00:29
stupid2:看了內文和推文~猜測是compiler的不同的原因(猜測) 09/06 00:31
jlovet:這,我沒有()也會是零阿...有定義說()會初始? 09/06 00:40
hilorrk:primitive type加()有定義會初始為零吧? 沒有的話是未知數 09/06 00:58
hilorrk:所以才能讓template<typename T> foo(T x = T())這種用法 09/06 00:59
hilorrk:也適用於primitive type 09/06 00:59
jehovah:我是看c++ primer 4/e寫到new內建型別在global初值為0 09/06 01:01
jehovah:在scope中則不會初始化, 除非接上空括號() 09/06 01:02
jehovah:試過new int()值是0, 但是new int[x]()就無效.. 09/06 01:04
hilorrk:我在gcc 4.5中測是會全部初始為零的說... 09/06 01:06
hilorrk:你用的compiler是? 09/06 01:09
james732:我沒加 () 在VC是垃圾值 在gcc仍然全零 真怪... 09/06 01:13
hilorrk:在gcc全零純粹是運氣問題吧~剛好裡面的垃圾是零而已XD 09/06 01:14
hilorrk:我用char、int、long、float、double都測過 沒加是垃圾值 09/06 01:15
hilorrk:加了全變成零...in gcc 09/06 01:15
loveme00835:規格書中的 new expression 並沒有這樣的形式喔~ gcc 09/06 01:35
loveme00835:可以應該是額外的擴充吧 09/06 01:35
hilorrk:我加上-ansi -pedantic -Wall也都沒有任何error/warning 09/06 01:46
hilorrk:而且行為也一樣... 所以我以為是標準規定的XD 09/06 01:46
hilorrk:剛看了一下規格書 應該是有這種形式吧? 09/06 02:19
hilorrk:new-expression -> new new-type-id new-initializer 09/06 02:20
hilorrk:new type-specifier new-declarator new-initializer 09/06 02:21
hilorrk:->new type-specifier direct-new-declarator new-initial 09/06 02:23
hilorrk:izer 09/06 02:23
hilorrk:->new type-specifier [expression]() 09/06 02:23
loveme00835:嗯嗯看錯了, 忘記把 new-type-id 給換掉 XD 09/06 02:25
hilorrk:嗯嗯 再加上15條的value-initialized 09/06 02:32
hilorrk:array的value-initialized是對每個element做value-initial 09/06 02:32
hilorrk:而scalar type的value-initialize= zero-initialize=0 09/06 02:33
holymars:DevC++內附的Mingw gcc是3.4.2耶= = 麻煩你放棄它好嗎XD 09/06 03:11
leicheong:記得VC的debug mode會初始化array為0, release mode 09/06 07:54
leicheong:則不會... 09/06 07:55
tomap41017:規格書應該是有new[]()的形式喔 @@prime有 10/12 21:17