[問題] 請幫忙測一下程式結果

看板C_and_CPP作者 (卯)時間12年前 (2011/09/16 09:16), 編輯推噓4(4017)
留言21則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux, Ubuntu 10.04, GCC-4.4.3 主機是i7的CPU,不清楚CPU是不是也會影響...? 問題(Question): 這個程式我測了三台主機,其中GCC-4.1.2的兩台主機測起來結果正確 但是用GCC-4.4.3編出來結果卻是錯誤的 他只是一個單純的Sequential Code,沒有執行緒平行執行 所以結果不一樣一直讓我覺得很奇怪 在for-loop裡面有兩段,把前面if-else那段mark起來結果會正確 但是不mark掉,結果就錯誤了 我手上已經沒有GCC-4.4.3的主機了,不知道有沒有人可以幫我測一下 我想確認一下是我主機的問題,還是Compiler的問題 Code附在下面,還請各位幫忙 謝謝 針對a的值,應該要是326,而我的4.4.3跑出來卻是259 整理一下: 正確結果(326):4.1.2, 4.5.1 有問題結果(259):4.2.1, 4.4.3 程式碼(Code):(請善用置底文網頁, 記得排版) http://pastie.org/2540721 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.105.242

09/16 09:42, , 1F
Ubuntu 10.04, gcc-4.5.1, 結果 326
09/16 09:42, 1F

09/16 10:37, , 2F
我用 4.2.1 跑出來是 259
09/16 10:37, 2F

09/16 10:46, , 3F
我用人腦Debug結果也是326
09/16 10:46, 3F

09/16 10:46, , 4F
所以真的是Compiler的問題嗎?
09/16 10:46, 4F

09/16 10:46, , 5F
不知道還有沒有多一點的樣本可以讓我推測一下,謝謝
09/16 10:46, 5F

09/16 10:54, , 6F
咦, 我用 4.5.2 的 MinGW 出來是 259...
09/16 10:54, 6F

09/16 10:57, , 7F
我一直覺得很奇怪,a跟前面的if-else根本沒有關係
09/16 10:57, 7F

09/16 10:57, , 8F
為什麼會因為那部份而影響結果...
09/16 10:57, 8F

09/16 10:59, , 9F
請問u大是用同一台主機測的嗎?
09/16 10:59, 9F
※ 編輯: godman362 來自: 140.123.105.242 (09/16 11:03)

09/16 11:16, , 10F
for (i = 5; i < ITERATION; i++)
09/16 11:16, 10F

09/16 11:16, , 11F
array[i+2]
09/16 11:16, 11F

09/16 11:17, , 12F
when i = 99, what will happen?
09/16 11:17, 12F

09/16 11:42, , 13F
apple-gcc 4.2.1 326
09/16 11:42, 13F

09/16 11:50, , 14F
對耶, i = 98 跟 i = 99 的時候會超出邊界, 可能改到 a
09/16 11:50, 14F

09/16 11:51, , 15F
應該是這樣所以才有未定義行為吧
09/16 11:51, 15F

09/16 11:51, , 16F
就跟I大推的一樣, 存取違規了你還想要怎樣的結果?
09/16 11:51, 16F

09/16 11:53, , 17F
array[i+1] = array[i-3] + 13<--好像是side effect關係
09/16 11:53, 17F

09/16 11:58, , 18F
恩,看來不是我講的原因.是超出邊界的關係
09/16 11:58, 18F

09/16 14:29, , 19F
遇到奇怪的問題就拿 valgrind 出來查一下存取違規吧 XD
09/16 14:29, 19F

09/17 09:18, , 20F
喔,原來是這邊寫錯,真是抱歉
09/17 09:18, 20F

09/17 09:18, , 21F
沒有注意到是自己的邊界出了問題
09/17 09:18, 21F
文章代碼(AID): #1ESgDlKX (C_and_CPP)