作者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