首页  >  问答  >  正文

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

伊谢尔伦伊谢尔伦2764 天前1024

全部回复(9)我来回复

  • 怪我咯

    怪我咯2017-04-17 13:06:59

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

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:06:59

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

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

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:06:59

    纠正个拼写错误core dump

    回复
    0
  • 阿神

    阿神2017-04-17 13:06:59

    大部分语言都有类似的问题,只是换了个名字而已
    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……

    回复
    0
  • 高洛峰

    高洛峰2017-04-17 13:06:59

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

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:06:59

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

    回复
    0
  • 怪我咯

    怪我咯2017-04-17 13:06:59

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

    回复
    0
  • 阿神

    阿神2017-04-17 13:06:59

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

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

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

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

    回复
    0
  • 迷茫

    迷茫2017-04-17 13:06:59

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

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

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

    回复
    0
  • 取消回复