Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1437386
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-01-05 20:34:14

    今天主要内容是常见的编程错误以及解决办法。主要还是编程习惯的养成,包括编程风格、编程原则、常见易出现问题的规避方法。

一、资源泄露
    包括内存、I/O资源的系统资源,使用之后要及时释放。
Tip 1:malloc()申请内存之后需要检查是否申请成功,但是C++中,即使是申请成功也有可能出现异常,需要使用try{...} catch(){....}抓取是否有异常;成功后需要将内存初始化为0。
Tip 2:使用完之后需要free()掉,指针置NULL。
Tip 3:遵循晚申请,早释放原则。
Tip 4:使用对应的内存申请释放方法;malloc() -- free();  new -- delete
Tip 5: Linux操作系统下栈内存、I/O资源均有限制,例如I/O为1024,所以申请内存不要申请很大的内存,I/O使用完后关闭,否则资源耗尽出现异常。
Tip 6:不要申请很大的栈内存,如果很大效率会降低,迫不得已申请为提高效率,将开头与结束置‘\0’。
*Tip 7:多次申请内存,在程序异常退出时均要对释放的内存进行释放。
Tip 8:内存空洞:内碎片与外碎片。

二、函数传值
    函数参数均是值传递,包括指针也是。
Tip 1:注意传递指针时,子函数内没有修改变量内容的情况就是值传递,尤其是指针,很容易出错。
Tip 2:传参首先进行合法性检查。
Tip 3:函数参数不要因编译器不同结果不同,例如:参数为表达式,计算顺序不同结果不同的因编译器编译顺序。

三、数据类型
    C语言强制类型转换很方便,但是也带来很多问题。
Tip 1:大范围数转换为小范围数,会因OS的大小端造成数据传递不一致现象。
Tip 2:小范围数转为大范围数,会导致多读取字节数据,而非预计的数据。
Tip 3:不同平台下数据类型会不相同。
Tip 4:注意循环中是否会出现死循环。例如char i;for(i=0; i<300; i++){....}
char型数据-128~127,所以永远不会退出。

四、字节对齐
Tip 1:#pragma pack(1)设计对齐字节大小

*五、字符串
    字符串最容易出问题 ,包括越界等安全隐患。   
Tip 1:所占内存大小为实际长度加上结尾的'\0',分配之后以及复制等操作之后制动加结尾'\0',小心越界。
Tip 2:注意内存初始化,字符串拷贝或是其他操作会由以前内容所影响。
阅读(588) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~