| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 895 人关注过本帖
标题:程序执行 -4.客户入住费用统计- 程序会发生崩溃,实在找不到原因了
只看楼主 加入收藏
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:20 
回复 10楼 神机军师
while (!strcmp(mem, p->NUM._room))    //这里是不是不应该有这个
    {
        p = p->next;
    }

总有那身价贱的人给作业贴回复完整的代码
2013-12-24 15:23
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
回复 11楼 embed_xuel
哦 yes! 万分感谢! 就是这里出问题了
 谢谢

未知令人期待!
2013-12-25 19:21
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 12楼 神机军师
想知道怎么判断出来的吗?

总有那身价贱的人给作业贴回复完整的代码
2013-12-25 21:01
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
回复 13楼 embed_xuel
大神给说一下呗

未知令人期待!
2013-12-30 12:16
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
首先,你描述了“程序崩溃”,这点基本上是内存操作出现了问题。但是代码太长了,我告诉你自己先用printf定位一下看看是在哪里出现的崩溃(这个方法很土,但是很直观)。后来你说定位到了Cost 函数的scanf出错了。
这里的代码是scanf ("%s", mem); mem是局部数据,如果出错应该就是输入过长,导致数组越界了,但是猜想按照你的经验应该不会犯这种错误,或者是犯这种错误自己也能解决。所以往后面看:
    while (!strcmp(mem, p->NUM._room))
    {
        p = p->next;
    }
这段代码一看就不舒服,我前面说了程序崩溃基本上是内存操作出现了问题,这里的指针p在循环里一直没有保护,如果p为NULL了还做strcmp(mem, p->NUM._room)是会异常的,所以稍一注意就会发现while的循环条件有毛病了。

总有那身价贱的人给作业贴回复完整的代码
2013-12-30 13:21
冯天华
Rank: 2
等 级:论坛游民
帖 子:28
专家分:24
注 册:2013-12-14
收藏
得分:0 
作为一个新手,看这么长的代码,我表示压力很大啊!唉!我要什么时候才能写出这么长的代码来……
2014-01-02 05:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 15楼 embed_xuel
不習慣寫保護性代碼、沒有相關意識,很多人是這樣的。保護性代碼,必然帶來臃腫的代碼視覺,以及降低效率,被追求“高效”、“簡潔”的人嫌棄,帶來問題也是自找的。

授人以渔,不授人以鱼。
2014-01-02 09:20
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 17楼 TonyDeng
程序出错往往是在异常分支上没有处理好

总有那身价贱的人给作业贴回复完整的代码
2014-01-02 09:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
沒考慮可能出現的異常,就是思維不够全面,一般是假設條件太多(比如把傳入參數的合法性檢查寄托於函數調用者之類),對某些小幾率事件抱有僥幸心理,一個一個小的看似微不足道的隱患隨著程序的增大變成可怕的黑洞,這種思維的人寫代碼到一定規模,就到處出問題,而且怎麽也找不到問題所在,因爲他不會讓程序自己在出錯時報告錯誤所在(那恰恰是編碼時很多餘的部分)。不要等程序抛出異常,那時已經是要到“優雅地結束程序”的時候了,但很多潛在異常是在編碼時就可以考慮到處理手段的(比如fopen()失敗的諸多原因其實是可以檢查出來的,像事先檢查文件是否存在再調用fopen()函數,好過等fopen()返回失敗時不知道到底是文件不存在還是沒有權限讀寫)。事先考慮得多,運行時才不會經常抛出異常,異常就如“藍屏”,看得多了,結論就是你的程序沒寫好。

像那種喜歡用scanf()接收數據的,也是此類,他們似乎沒意識到當你要求輸入數值但用戶敲入了字母的可能(那個時候輸入緩衝區還殘留著無法讀取、無法跳過的數據),那樣該怎麽處理,我沒見過有人思考這類問題的,還用這種代碼來編寫畢業設計的系統,那樣的程序也叫能用的?畢業了也沒用!

[ 本帖最后由 TonyDeng 于 2014-1-2 09:54 编辑 ]

授人以渔,不授人以鱼。
2014-01-02 09:37
快速回复:程序执行 -4.客户入住费用统计- 程序会发生崩溃,实在找不到原因了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017563 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved