看板 C_and_CPP 關於我們 聯絡資訊
請問以下程式碼: int Function ( int a, int b ) { int max = 0, sum = 0; sum = sub_Function_a ( max ) + sub_Function_b ( max++ ); } // int Function() 這種情況執行出來一定是 Segmentation fault 這種錯誤算十三戒中的第幾戒? -- Plurk: http://www.plurk.com/shrekwang Blog: http://shrekat.blogspot.com ____ _ _ __ __ / ___|| |__ _ __ ___| | __ \ \ / /_ _ _ __ __ _ \___ \| '_ \| '__/ _ \ |/ / \ \ /\ / / _` | '_ \ / _` | ___) | | | | | | __/ < \ V V / (_| | | | | (_| | |____/|_| |_|_| \___|_|\_\ \_/\_/ \__,_|_| |_|\__, | -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 221.120.69.156
shrekwang:眼殘,找到了,第 8 戒...... 10/13 15:32
stupid0319:我眼殘了,找不到錯在哪 10/13 15:36
ericinttu:為什麼要給人腦編譯器高度挑戰呢? 10/13 15:39
shrekwang:錯在呼叫兩個 sub_Function 的地方; 10/13 15:54
stupid0319:那錯在哪呢,我一直看不出來>"< 10/13 15:58
yauhh:這行並沒有改變數二次. 這行的問題是在執行順序沒有定義 10/13 16:02
purpose:http://codepad.org/VBRkxzxy 錯在哪 10/13 16:45
purpose:還是原PO你貼的程式碼部份根本不是錯的地方?你應該貼出 10/13 16:48
purpose:那兩個函數的內容 10/13 16:49
linjack:錯在同一個 sequence point 區間內對變數又寫又讀 10/13 17:06
linjack:無法保證 a 的結果。用 gcc4 開 -Wall 的話會跳 warning 10/13 17:07
purpose:瞭解,可是 Segmentation fault 應該是出錯時的訊息,未定 10/13 17:08
linjack:第八誡中提到當然你不該對其值修改一次以上, 10/13 17:09
purpose:義行為,不一定導致程式錯誤,通常是結果錯誤? 10/13 17:09
linjack:但其實又讀又寫各一次意思是雷同的,無法保證誰先執行到 10/13 17:09
linjack:進而無法保證這整段程式的結果正確性。 10/13 17:09
linjack:確實他這段 code 會 seg fault 可能有其他原因 10/13 17:10
linjack:但是單就讀 a 又 a++ 這段的「未定義行為」,本來就有可能 10/13 17:11
linjack:會造成 seg fault,因為什麼都有可能發生,你不能猜測 10/13 17:11