作者gppo (香蕉是什麼?)
看板C_and_CPP
標題Re: [問題] 宣告變數的位置
時間Wed Mar 11 18:03:47 2009
自問自答....
原因在於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
1F:推 ledia:以 C 來說, 那是 programmer 的責任 03/11 18:13
2F:→ ledia:並不是 Dev-C++ 不嚴謹, 而是因為這不是他的工作 03/11 18:14
3F:→ ledia:至於 runtime 為什麼 win32 不會吐 segmentation fault 我就 03/11 18:14
4F:→ ledia:不知道了 03/11 18:14
5F:→ ledia:(理論上在 win32 會以 "此程式即將關閉, 請洽..." 來表示) 03/11 18:15
6F:推 HudsonE:運氣好沒壓到外面 (其實應該說運氣不好!!?) 03/11 18:24