作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [討論] HW 1.2.p2 的 return garbage
時間Tue Oct 19 01:45:39 2010
※ 引述《BBSealion (海獅)》之銘言:
: 其實我不太懂的是,要去判斷return garbage 的用意
: 照程式的邏輯來看(以寫定的function Matrix inputMatrix 來說)
: 輸入i一開始的上限就被限制住了 (i < nRows)
: 這樣不會有超過而要return garbage的時候吧? (還是我沒發現orz)
: 而且程式也沒有要求判斷奇怪的狀況
: 也就是說matrix的+和*的過程,都要一開始輸入就是合理的才去考慮
: (雖然即使超過好像也沒有影響?)
: 或者退一步說,感覺上是可以寫到不會發生這個條件而完成作業要求(吧?)
: 真的不論如何都有可能會因為輸入錯誤,而觸發這個判斷條件嗎?
: (在完成作業的狀況下)
對,按照題目的 main 是不應該有輸入的 i >= _nRows 的情況發生,
所以題目要求要 return garbage 的用意也是希望 code 本身可以考慮得更周詳一點,
當然,(題目)還是有一些缺陷,請見我回答另一位同學的信,請大家配合與包含。
======================================================================
: 教授你好:
: 為了garbage問問題感覺有點愚蠢XD
: 之前我弄一個local variable給它傳 出現一堆warning
: 但在class裡面沒用的東西感覺有點找不到
: (例如Vector裡的_size或是_data指的東西都有點不想給寫錯的程式亂搞)
: 所以我現在是回傳_data[_size]給它
: 也就是不屬於我的leap memory裡的東西
: (因為_data的大小就是_size)
: 可是這樣弄一弄感覺又更危險了
: 讓使用者亂弄leap memory很讓人心驚
: 那有沒有更好的沒想到的東西呢?
: 希望教授可以給我一點小小的解惑~
: 謝謝教授
(Sorry for my late response. I have meetings all day long...)
嗯,你的考量都很正確,
Vector 裏頭可以 return 而不會有 warning 的也只有 _size 以及 _data 而已。
但是你又不希望隨便回傳 data member 而讓寫錯的程式搞亂,
而題目又說不能隨便加或更改 data member...
這樣子的確是沒有什麼好的解決辦法,
當然,如果不是作業規定限制的話,我想你可以有兩種選擇:
1. Throw 一個 exception 出去,讓 caller 端決定要怎麼處置,
如果 caller 忽略不處置的話,程式就會自動結束掉...
2. 宣告一個 gloal 的變數,當作 error handler,
如果是 class 的話,就宣告一個 static data member,
這樣回傳它就不會有甚麼問題了。
話說回來,這個作業還是請你 "勉為其難" 的用不會違反作業規定的方式來處理好了!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.193.11.13
1F:推 BBSealion:謝謝教授! 了解了 10/19 02:12
2F:→ KatsHC:所以不能用throw喔@@? 10/19 23:51
3F:→ ric2k1:你要用 throw 也是可以啦...但你要 handle這個exception嗎? 10/19 23:53
4F:→ KatsHC:我本來是想說把程式結束掉就好了...囧a 10/20 00:50