睡眠分析项目中遇到的问题以及经验总结

一.遇到的问题

1. 栈溢出

现象:程序运行到某一个函数时,程序退出,加断点也不能捕获到是哪句代码出了问题。

分析:在手机端平台,如果开辟一个几十K大小栈空间就会导致栈溢出,进入函数之前会先执行局部变量空间的分配等工作。但是在分配空间时就失败了,所以在函数里加断点也不能捕获。

解决:开辟较大空间使用 new 从堆上开辟空间。

2. 内存泄露

现象:程序运行一点时间后,内存消耗越来越大。总共到两次内存泄露的情况。

第一次是使用new分配了空间,但是忘记了释放空间。第二次是使用第3方模块时,忘记调用释放的语句。

教训: 自己开辟的堆空间,记得释放,new 和delete 配对。如果使用第三方模块,需仔细查阅使用手册,特别留意释放内存的操作,不要认为是可有可无的操作。

3. 指针越界

指针越界引起的问题很奇怪让人难以琢磨。项目中遇到过指针越界的问题,指针越界后操作到另外 一个模块的堆内存了,表面现象看起来好像是另外一个模块的问题。指针越界问题除了小心,多检查外应该也没什么好办法解决。对数组操作时,要多留意,特别是数组的偏移使用变量时,应多检查。

4 线程消息发送

使用 win32 的 PostThreadMessage 有时不能成功发送,记得使用MFC中的的 cwinthread对象的 PostThreadMessage .

5. 如果想设定某一个程序在一个较长的预定时间启动,通过settimer来启动 好像不精确。最后还是设定了一个较小的定时器,每次检查是否到达指定的时刻。


二.经验

1. 和采集器之间定义的数据结构,可以使用一个结构体来定义,方便维护.
2. 程序中不要使用太多常数。

3. 使用 结构化异常捕获系统异常
可以使用__try __exception 来捕获结构化异常,但是好像不能捕获所有的结构化异常。
4. 使用日志功能方便排查程序故障
5.程序代码较多时,最好使用不同的文件夹来组织代码
6. 务必将界面代码和业务代码分离!






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值