c++ - 为什么写c语言很容易core down?
伊谢尔伦
伊谢尔伦 2017-04-17 13:04:59
0
9
1031
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(9)
刘奇

兩方面吧,從語言看,C語言不自帶記憶體管理機制,而Java、C#、js等語言自帶了記憶體管理機制。記憶體管理就是容比較易出問題的一個地方,對程式設計師要求很高。
從運行時看,大部分C語言編譯之後直接跑在硬件,語任何錯誤都直接反應到硬體上;而與之相對的解釋型語言或者編譯後跑在虛擬機上的語言,解釋器或虛擬機器本身在執行過程中會做很多檢查,盡可能的避免奔潰。

巴扎黑

應該是程式設計時就有漏洞,從而在運行上反映了程式碼設計的漏洞。
C語言需要全面掌握編譯器特性以及相關電腦底層知識

另外一方面就是多看看大牛們的程式碼,多調試。多多熟悉編譯器,多使用成熟的監測工具

大家讲道理

修正個拼字錯誤core dump

阿神

大部分語言都有類似的問題,只是換了個名字而已
C的版本叫做segmentation fault(看看這網站的名字)
C++也是segmentation fault,也有各種exception
Java的叫做NullPointerException和ArrayOutOfIndex
動態語言裡變成了NoMethodError或No attribute或undefined is not a function之類,本質上還是NullPointerException

當然,C和C++比較容易出現這種問題
因為C和C++需要手動釋放內存,做錯了(釋放錯位置/釋放後又用了/釋放後以為沒釋放,結果別人拿來重用時又釋放了,etc)就會segmentation fault
Java等有了GC,內存儘管用,不用釋放,於是沒了這些問題
然而程式設計師的粗心是無限的,於是你還是會遇到NullPointerException和ArrayOutOfIndex…

小葫芦

程式設計時誰都不想讓它出問題
c語言 太多的記憶體操作 太容易越界
沒有一定經驗 很難寫出優秀的程式碼~

大家讲道理

這種用一部分的說法,就是「直譯成彙編」的程式語言,除了具備現代編譯語言的基本形態,其實還是走得比較底層的開發路線吧,加上因為允許程式設計師任意使用指針,編譯器也不敢管太多。所以對開發者本身的素質要求就高了很多,對於像我這種只學過js的人,c語言根本就是什麼都在自己管理…

刘奇

開發者層級問題
linux/unix這不都還算穩定嗎

阿神

主要問題是用C語言時,記憶體由程式設計師自己管理,記憶體管理不好,就掛了。
典型:

  1. 空指標訪問,導致程式掛掉。

  2. 野指針訪問,例如某指針指向的內容已經失效,再去訪問該不可控指針,導致程式掛掉。

  3. 記憶體越界訪問,即通常所說的“記憶體被踩了”,例如數組越界寫內存,修改了未知資料區。這種操作極度危險和隱蔽,通常很難定位。
    C語言把很多事情交由程式設計師自己管理,在提高靈活性和效能的基礎上也存在穩定性方面的風險。這是一把雙面刃,提升自己的水平才能游刃有餘,否則可能適得其反。

迷茫

其實真正的原因是人的原因。

很多語言,譬如C#和Java,有一個設計良好的異常處理系統。很多程式設計師,寧可冒著資料出錯的風險,也不想程式掛掉,於是做什麼都catch一下,把不認識的exception隨便找個地方log一下就忽略了。

然而C語言卻沒有這樣省事的做法,雖然同樣程式都寫得很差,但是在C語言這邊就表現的容易掛。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板