Home  >  Q&A  >  body text

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

伊谢尔伦伊谢尔伦2764 days ago1022

reply all(9)I'll reply

  • 怪我咯

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

    Two aspects. From a language perspective, C language does not have its own memory management mechanism, while languages ​​​​such as Java, C#, and js have their own memory management mechanisms. Memory management is an area where problems are prone to occur, and it places high demands on programmers.
    From a runtime perspective, most C languages ​​are compiled and run directly on the hardware, and any errors are directly reflected on the hardware; in contrast, interpreted languages ​​or languages ​​that are compiled and run on a virtual machine, the interpreter Or the virtual machine itself will do a lot of checks during execution to avoid crashes as much as possible.

    reply
    0
  • 巴扎黑

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

    It should be that there is a loophole in the program design, which reflects the loopholes in the code design in operation.
    C language requires a comprehensive understanding of compiler features and related underlying computer knowledge

    On the other hand, look at the code of experts and debug more. Get familiar with the compiler and use mature monitoring tools

    reply
    0
  • 大家讲道理

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

    Correct a spelling error core dump

    reply
    0
  • 阿神

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

    Most languages ​​have similar problems, just with a different name
    The C version is called segmentation fault (look at the name of this website)
    C++ also has segmentation fault, and there are various exceptions
    Java's called NullPointerException and ArrayOutOfIndex
    in dynamic language become NoMethodError or No attribute or undefined is not a function, etc. In essence, it is still NullPointerException

    Of course, C and C++ are more prone to this kind of problem
    Because C and C++ need to manually release the memory and do it wrong (release the wrong location/use it again after releasing/release it and think it is not released, but someone else uses it) If it is released during reuse, etc.) there will be a segmentation fault
    With GC in Java, etc., the memory can be used without releasing it, so these problems disappear
    However, the carelessness of programmers is unlimited, so you will still encounter to NullPointerException and ArrayOutOfIndex…

    reply
    0
  • 高洛峰

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

    No one wants it to go wrong when designing a program
    C language has too many memory operations and is too easy to cross the line
    It is difficult to write excellent code without certain experience~

    reply
    0
  • 大家讲道理

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

    This kind of programming language, in partial terms, is "literally translated into assembly". In addition to having the basic form of a modern compiled language, it actually follows a relatively low-level development route. In addition, because programmers are allowed to use pointers at will, The compiler doesn't dare to care too much. Therefore, the quality requirements for developers themselves are much higher. For people like me who have only learned JS, C language basically manages everything by themselves...

    reply
    0
  • 怪我咯

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

    Developer level issue
    Isn’t linux/unix relatively stable?

    reply
    0
  • 阿神

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

    The main problem is that when using C language, the memory is managed by the programmer himself. If the memory management is not good, it will hang.
    Typical:

    1. Null pointer access causes the program to hang.

    2. Wild pointer access, for example, if the content pointed to by a certain pointer is invalid, then accessing the uncontrollable pointer will cause the program to hang.

    3. Memory out-of-bounds access, which is commonly referred to as "memory being stepped on", such as an array being written out-of-bounds into the memory, modifying an unknown data area. This operation is extremely dangerous and hidden, and is often difficult to locate.
      The C language leaves many things to the programmers to manage. While improving flexibility and performance, there are also stability risks. This is a double-edged sword. Only by improving your level can you be more comfortable, otherwise it may be counterproductive.

    reply
    0
  • 迷茫

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

    In fact, the real reason is human reason.

    Many languages, such as C# and Java, have a well-designed exception handling system. Many programmers would rather risk data errors than crash the program, so they catch everything they do and log unfamiliar exceptions somewhere and ignore them.

    However, C language does not have such a trouble-free approach. Although the same program is poorly written, it is easy to fail in C language.

    reply
    0
  • Cancelreply