首页 > 为什么写c语言很容易core down?

为什么写c语言很容易core down?

为什么写c语言很容易core down?


大部分语言都有类似的问题,只是换了个名字而已
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语言不自带内存管理机制,而Java、C#、js等语言自带了内存管理机制。内存管理就是容比较易出问题的一个地方,对程序员要求很高。
从运行时看,大部分C语言编译之后直接跑在硬件,语任何错误都直接反应到硬件上;而与之相对的解释型语言或者编译后跑在虚拟机上的语言,解释器或虚拟机本身在执行过程中会做很多检查,尽可能的避免奔溃。


程序设计时谁都不想让它出问题
c语言 太多的内存操作 太容易越界
没有一定经验 很难写出优秀的代码~


应该是在程序设计时就有漏洞,从而在运行上反映了代码设计的漏洞。
C语言需要全面掌握编译器特性以及相关计算机底层知识

另外一方面就是多看看大牛们的代码,多调试。多多熟悉编译器,多使用成熟的监测工具


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

很多语言,譬如C#和Java,有一个设计良好的异常处理系统。很多程序员,宁可冒着数据出错的风险,也不想程序挂掉,于是干什么都catch一下,把不认识的exception随便找个地方log一下就忽略了。

然而C语言却没有这样省事的做法,虽然同样程序都写得很差,但是在C语言这边就表现的容易挂。


纠正个拼写错误core dump


这种用一部分的说法,就是「直译成汇编」的编程语言,除了具备现代编译语言的基本形态,其实还是走得比较底层的开发路线吧,加上因为允许程序员任意使用指针,编译器也不敢管太多。所以对开发人员自身的素质要求就高了很多,对于像我这种只学过js的人,c语言根本就是什么都在自己管理……


主要问题是用C语言时,内存由程序员自己管理,内存管理不好,就挂了。
典型:

  1. 空指针访问,导致程序挂掉。

  2. 野指针访问,例如某指针指向的内容已经失效,再去访问该不可控指针,导致程序挂掉。

  3. 内存越界访问,即通常所说的“内存被踩了”,比如数组越界写内存,修改了未知数据区。这种操作极其危险和隐蔽,通常很难定位。
    C语言把很多事情交由程序员自己管理,在提高灵活性和性能的基础上也存在稳定性方面的风险。这是一把双刃剑,提升自己的水平才能游刃有余,否则可能适得其反。


开发者水平问题
linux/unix这不都还算稳定吗

【热门文章】
【热门文章】