![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 83
jxzdsw
这个作者很懒,什么都没留下…
展开
-
valgrind内存检测原理、使用和报错的含义
valgrind内存检测原理、基本使用和报错的含义详解。原创 2022-06-10 19:11:40 · 1523 阅读 · 0 评论 -
使用gcov进行C语言代码覆盖率统计
介绍:gcov是一个测试代码覆盖率的工具。它必须与GCC一起使用来分析程序,以帮助并发现程序的未测试部分,还可以结合lcov工具生成html格式的统计报告,可以方便的查看代码覆盖率的情况,甚至可以查看每一行代码的执行次数。基本原理:基本块BB:如果一段程序的第一条语句被执行过一次,这段程序中的每一条语句都要执行一次,那么这段程序构成一个基本块。一个BB中的所有语句的执行次数一定相同。一般情况下BB的最后一条语句一定是一个跳转语句,跳转的目的地是另外一个BB的第一条语句,如果跳转是有条件的,就产生原创 2021-03-02 19:59:55 · 7060 阅读 · 3 评论 -
C语言常见内存管理错误
C语言常见内存管理错误:内存没有分配就开始访问。这常常是分配内存后,没有返回值。如果内存分配失败了,就开始使用,就会发生解引用空指针。 内存没有初始化,那么其中的值是不确定的。如果程序员当做值是0来使用,就出现了错误。 内存用完没有释放。这导致内存泄露。 内存重复释放。如果这块内存已经分配给程序的其它部分,则影响了其它部分的功能。如果这块内存还没有分配给程序的其它部分,则没有危害。 释放内存后又访问。如果这块内存已经分配给程序的其它部分,那么执行写操作就影响了新使用者的功能,执行读操作,则读出了原创 2020-08-26 22:08:20 · 354 阅读 · 0 评论 -
内存泄露(memery leak)避免方法
C语言中经常出现的一种缺陷就是内存泄露。如何避免内存泄露呢?1、malloc()/calloc()和free()要成对出现。但是复杂的代码中,这一点并不容易执行得很好,所以导致内存泄露。2、不再使用的内存尽快释放。避免遗忘。3、一定要在引用者作用域结束前,释放内存。否则这块内存就访问不到了,也就无法释放了。4、被多处引用的内存,使用引用计数来管理,不再引用时,则引用计数减1,如果引...原创 2018-07-25 11:11:43 · 3553 阅读 · 0 评论 -
空指针(NULL pointer)解引用避免方法
什么是解引用空指针?C语言中,如果一个指针变量的值为NULL,解引用这个指针时,会导致程序崩溃(Segmentation fault)。如何防止解引用空指针?基本思路是在解引用指针前,先判断是否为NULL,如果是NULL则不要解引用。但是C语言程序中,指针的使用非常多,在每次解引用之前都做判断是非常低效、不可行的。通常只在解引用没有把握的指针前,先做判断。比如其它模块传入的函数参数、函...原创 2018-07-23 16:54:26 · 20179 阅读 · 3 评论 -
野指针(wild pointer)避免方法
什么是野指针?没有赋初值的指针变量。野指针有什么危害?访问野指针,结果随机,可能会破坏内存中的其它内容,也可能导致程序崩溃。如何防止野指针?指针在定义时,如果没有初值,则赋初值为NULL,防止出现野指针。...原创 2018-07-23 17:39:13 · 2801 阅读 · 0 评论 -
悬空指针(Dangling pointer)避免方法
什么是悬空指针?一个指针所指的内存被释放后,这个指针就被悬空了。悬空指针的危害?访问悬空指针,结果随机。可能导致程序功能不正常,也可能导致程序崩溃。如果受到影响的是其它功能,问题通常很难定位。如何避免悬空指针?基本思路:在释放一块内存时,将指向这块内存的指针变量设置为NULL。访问指针变量前,先判断是否为NULL。进阶:当有多个指针变量都指向同一块内存时,释放这块内存时,需...原创 2018-07-23 18:02:11 · 11015 阅读 · 0 评论 -
回调函数callback function的机制及使用举例
如果把函数指针传递给另一个函数(调用者),当调用者执行时,函数指针所指的函数也被执行。被调用的函数就是回调函数。回调函数实现的机制是1、定义一个回调函数; 2、提供函数实现的一方在初始化的时候,通过注册函数 向调用者(管理单元/调度函数)注册回调函数的函数指针。 3、当特定的事件发生时候,调用者使用函数指针调用回调函数对事件进行处理。举例:Quagga0.9.22中OSPF...原创 2018-07-25 10:56:02 · 7692 阅读 · 0 评论 -
缓冲区溢出(buffer overflow)避免方法
什么是缓冲区溢出?copy数据进buffer时,数据长度超过buffer中的剩余空间。缓冲区溢出的危害?缓冲区溢出,结果随机,可能会导致程序功能不正常,也可能导致程序崩溃。如果受到影响的是其它功能,因为故障现象随机,所以问题通常很难定位。别有用心的攻击者还会利用缓冲区溢出缺陷,覆盖控制变量的内容,接管程序的运行。详细来说:读越界时,因为读取到错误的数据,所以可能导致功能不正常,...原创 2018-07-24 09:22:06 · 34083 阅读 · 0 评论 -
数组下标越界的避免方法
为什么会出现数组下标越界?C语言不检查数组下标的合法性数组下标越界的危害数组下标越界时,结果随机。可能导致程序功能不正常,也可能导致程序崩溃。如何防止数组下标越界?1、在使用循环遍历数组元素时,注意防范off-by-one的错误。2、对于作为函数参数传入的数组下标,要判断其合法性。if ( (pos < 0) || (pos > ARRAY_SIZE) ) {异...原创 2018-07-24 09:55:00 · 12007 阅读 · 2 评论