Web Analytics

C,C++开源项目中的100个Bugs

俄罗斯OOO Program Verification Systems公司用自己的静态源码分析产品PVS-Studio对一些知名的C/C++开源项目,诸如Apache Http Server、Chromium、Clang、CMake、MySQL等的源码进行了分析,找出了100个典型的Bugs。个人觉得这份列表对C/C++ 程序员有一定参考意义。与其说事后用静态工具分析,倒不如在编码时就提高自知自觉,避免这份列表上的错误发生在你的代码中,因此这里将部分摘录一些Bugs(Bug编号这里不连续,为的是对应原文的编号)并做简要说明。原文将这份Bug列表分为了几类,这里也将沿用这个思路。 ...

April 10, 2013 · 15 min · Tony Bai

简析指针与多维数组

上一篇文章中对多级指针做了简要分析,其实只有当指针与多维数组以及函数联合在一起使用时,麻烦才算真正到来。 零、数组****与数组名 C语言中的数组的一般声明形式如下: T arr_name[n]; /* T为类型,n为数组元素个数 */ 从内存布局角度来说,数组T arr_name[n]就是内存中连续的内存单元,每个内存单元的长度为sizeof(T),数组的起始内存单元地址为arr_name所在的内存地址, 同时也是数组第一个元素arr_name[0]的内存地址。 ...

March 28, 2013 · 7 min · Tony Bai

Go与C语言的互操作

Go有强烈的C背景,除了语法具有继承性外,其设计者以及其设计目标都与C语言有着千丝万缕的联系。在Go与C语言互操作(Interoperability)方面,Go更是提供了强大的支持。尤其是在Go中使用C,你甚至可以直接在Go源文件中编写C代码,这是其他语言所无法望其项背的。 在如下一些场景中,可能会涉及到Go与C的互操作: 1、提升局部代码性能时,用C替换一些Go代码。C之于Go,好比汇编之于C。 2、嫌Go内存GC性能不足,自己手动管理应用内存。 ...

September 26, 2012 · 9 min · Tony Bai

也谈指针运算

指针在C语言中的位置这里就不多说了,这里说一下C的指针运算。指针运算一般针对的是同一连续内存块,不同内存块之间的指针运算无意义,甚至可能导致异常情况。 ...

February 23, 2010 · 3 min · Tony Bai

挖掘一下C语言中的多维数组

好久没有看技术类的书籍了,今晚恰看到以前不知什么时候下到的一本oreilly的叫’mastering algorithms with c’的书,从书名可以看出这是一本讲算法的书,不过由于是选用了C语言作为讲解语言,所以难免不说说C语言。其中看到一节讲指针和数组,恰好碰到书中说: a[i][j] <=> *(*(a+i) + j),这个等价式看起来显而易见,但是还是有些东西值得挖掘一下的。 ...

November 29, 2006 · 3 min · Tony Bai

当数组访问越界后

下午到ChinaUnix C/C++版看了看,发现一个比较有意思的问题,一位兄弟在其帖子中问一段很简单的程序明显有数组越界访问之错误,可程序为什么运行起来却’安然无恙’,我看看了看,也给出了我自己的回复,晚上下班后又想想了这个问题,决定写一篇blog说说。 这位仁兄的程序(据他个人说来源自’GNU/Linux编程指南’)是这样的: ...

June 16, 2006 · 4 min · Tony Bai

当数组作参数时

C语言中的数组和指针总保持着’千丝万缕’的联系,这里仅针对数组作为函数实参时的情况做些说明^_^。 C语言中的数组可分为一维数组和多维数组两类,而多维数组中又以二维数组最为常见。这里也仅针对这一维数组和二维数组作简要说明。 ...

March 27, 2006 · 2 min · Tony Bai