Re: [問題] 宣告變數的位置

看板C_and_CPP (C/C++)作者 (香蕉是什麼?)時間16年前 (2009/03/11 18:03), 編輯推噓2(204)
留言6則, 2人參與, 最新討論串2/3 (看更多)
自問自答.... 原因在於result[50][10] result最多只有到[49][9] 但是我卻做了給result[50][..]值的動作 所以因此就覆蓋到spec的內容(所以其實被覆蓋到的可能不只spec這個變數) 或許是Dev-C++不嚴謹或其他原因 compile時他並沒有告訴我out of boundary之類的錯誤提示 不過印象中這類的錯誤如果是用工作站跑的話 應該會出現 "Segmentation fault"的錯誤訊息 雖然這應該是自己要注意的地方 不過不曉得板上有沒有Dev-C++的使用者 知道如何提升syntax或是memory運用上的警告 錯誤提示? 至於為什麼改變宣告順序就會正常 我想也只是運氣問題 他可能蓋到別的地方去了 ※ 引述《gppo (香蕉是什麼?)》之銘言: : 我遇到了一個很奇怪的問題.... : 想破頭還是不知道原因 : 所以來版上問問orz : 有段程式碼如下 : bool PA_gen(float* spec,....略); : int main(int argc, char *argv[]) : { : float spec[8]={0.0,0.0,1.2,1.0,1.8,0.0,0.6,0.3}; : float result[50][10]={0}; : .....略 : if(PA_gen(spec,.....略)) : { : } : ...略 : } : bool PA_gen(float* spec,....略) : { : cout << spec[2] ; : } : 理論上應該要印出spec[2]的值 也就是1.2 : 但是他印出來是0(也不是0.0 是0) : 但是如果改變一下宣告位置 : float result[50][10]={0}; : float spec[8]={0.0,0.0,1.2,1.0,1.8,0.0,0.6,0.3}; : 改成先宣告result再宣告spec : 很神奇的他就可以正確印出來了 : 我無法理解明明就差上下行而以 為什麼會有差異.... : 如果有說明不清楚的地方請在提出orz : 我會想辦法將不清楚的地方說明白 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.187.104

03/11 18:13, , 1F
以 C 來說, 那是 programmer 的責任
03/11 18:13, 1F

03/11 18:14, , 2F
並不是 Dev-C++ 不嚴謹, 而是因為這不是他的工作
03/11 18:14, 2F

03/11 18:14, , 3F
至於 runtime 為什麼 win32 不會吐 segmentation fault 我就
03/11 18:14, 3F

03/11 18:14, , 4F
不知道了
03/11 18:14, 4F

03/11 18:15, , 5F
(理論上在 win32 會以 "此程式即將關閉, 請洽..." 來表示)
03/11 18:15, 5F

03/11 18:24, , 6F
運氣好沒壓到外面 (其實應該說運氣不好!!?)
03/11 18:24, 6F
文章代碼(AID): #19juo4qq (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #19juo4qq (C_and_CPP)