软件编程的一些问题

原创 2007年09月29日 12:18:00
由于是自己的一些笔记,所以写的比较杂乱,呵呵

    

最近编写软件的时候,多次在程序运行时出现内存不足,Access Violation  After normal block等问题,当在程序最开始运行的时候出现这种问题还好解决,关键是我这个软件是需要多次读取文件数据,因此问题就出来了,最开始读取56个文件还是很理想的,然后连续读取第7个文件的时候,灾难发生了,就出现最开始我说的那些错误,有时候是这个错误,有时候又是那个错误,就前段时间,把我的头都搞大了TMD,查了N次都没有查出来是什么原因。

最开始我还以为是内存泄露的问题,的确,这和内存泄露还是有点相像的,不是吗?Access Violation ,内存不足,种种迹象表明这就是内存的泄露问题,我用下面的代码检查了一下:

#ifdef _DEBUG

              CMemoryState OldMem;

              CMemoryState NewMem;

              CMemoryState DifMem;

 

              OldMem.Checkpoint();

#endif

 

 

#ifdef _DEBUG

              NewMem.Checkpoint();

              if(DifMem.Difference(OldMem,NewMem))

              {

                     AfxMessageBox("Memory Linked!");

              }                         

#endif

   果然是有内存泄露问题的存在,处处出现Memory Linked的对话框,我一阵高兴,因为总算是找到了问题的根源所在啊,就这样,我按着这个指导方向,重新改写了一些函数的不足之处,hoho 经过我的努力,终于使这些代码消除了那个Memory Linked 的对话框,因此,我认为,我的问题已经解决了,呵呵,我兴高采烈的又开始运行我那漏洞百出的小小软件。很显然,当我继续读取文件数据的时候,还是出现了一些问题,实在是让我快崩溃了。后来我实在没有办法了,我以不变应万变,干脆把我那提示错误的类型直接去百度一下,呵呵,

我就直接百度After normal blocks。一看,原来这个错误还是有共性的,搜到了不少有价值的信息。其中有一条是这样的:

这样的错误主要是由内存越界操作导致堆栈被破坏引起的,我有一次申请了x大小的内存,却写入了xy (y>0)的数据,结果导致了这样的错误。由于错误发生的地点与导致错误发生的地点并一定相邻,导致查找错误很困难,对于内存一定要小心再小心。其实大多数莫名其妙的错误都是由内存越界操作引起的

其为CSDN的专栏,网址为:

  http://blog.csdn.net/hbrr224/archive/2006/12/23/1456366.aspx

看了这个描述,我有点豁然开朗的感觉了,很可能就是因为我申请的指针内存不够,导致了内存越界操作。很快我就找到了我那申请内存的指针,于是我开始了我那单步跟踪调试的伎俩,很快,我就发现了,我在申请内存的时候,申请内存数量的那两个变量还没有被初始化,我的天啊,原来在这里,我可算是找到你了,呵呵。

至此,我那小小软件的问题终于得以解决了,还是那句话,对于内存的操作实在是要小心再小心,很多莫名其妙的错误,摸不着头脑的错误,该死的错误,都是这些可爱的内存操作不当所引起的。

最后,程序员,实在是感觉不爽啊,哎~~~~~~~~,调个错误要花好长时间啊,尤其是像我等编码很不规范的来说,这个调试简直就是要命啊。:(

我在Android开发中遇到的一些问题

转载请注明来源:http://blog.csdn.net/KjunChen/article/details/50549538 自己在开发中遇到的一些常见的小问题,记录下来方便查阅。...
  • KjunChen
  • KjunChen
  • 2016年06月01日 09:55
  • 542

软件编程

最近应公司领导要求而需要改变目前测试产品的方式,于是我想用Tcl/Tk写一个可视化的程序,以方便作业员流程标准化作业。目前用到的仪器主要有信号产生器、频谱仪,主要是用于Cable modem的DS测试...
  • taishanheima
  • taishanheima
  • 2011年03月17日 00:41
  • 167

学习编程的方法、软件和工具

编程的学习跟许多其他技艺的学习一样,首先必不可少的就是理论基础,其次就是需要大量的、不断地练习。老生常谈,这也许是每个人都懂得的道理,但说起来容易做起来难。所以想要学好编程,还需要些方法和毅力才行。 ...
  • dc_726
  • dc_726
  • 2011年12月13日 21:28
  • 6197

NSMutableAttributedString 诡异的问题

NSAttributedString是一个带有属性的字符串,通过该类可以灵活地操作和呈现多种样式的文字数据。 这也是手动实现UIWeb布局的重要手段,其中一个诡异问题。 废话不多说直接上代码把。 ...
  • zhengjie19
  • zhengjie19
  • 2015年04月10日 17:30
  • 278

面向硬件编程的一些思考

最近小编这几天弄了弄硬件的编程,感觉很有趣,同时跟纯软件编程肯定是有很多区别的,所以在此和大家说道说道。 一、硬件编程         其实说道硬件编程,大家肯定乍一听感觉很难,很...
  • tr1912
  • tr1912
  • 2017年05月11日 14:24
  • 1013

关于SQL server 2000 的一些问题

刚刚完善了一下数据库连接代码,也发现了一些比较有意思的事情,所以想写出来给大家一个参考.  Set Conn = Server.CreateObject("ADODB.Connection")    ...
  • wwwce
  • wwwce
  • 2007年04月03日 19:11
  • 378

JSP学习过程中错误整理

有一些错误记录在代码日志里了,有一些保存在云笔记中,都是一些初学常犯的小错误,整理如下: 1-数据库连接错误 连接数据库时,数据库的jar包一定要放在WEB-INF文件夹中,如果还出错,就把jar...
  • rocky_03
  • rocky_03
  • 2016年08月08日 20:49
  • 164

js的事件捕获和事件冒泡学习心得

事件捕获和事件冒泡是两种完全相反的事件模型。 比如:      "fdsfsdf" 最里面的 我们做一个测试,为这个三层标签全部绑定click方法,如下 var yeye=document.g...
  • zhangyangblog
  • zhangyangblog
  • 2017年07月06日 14:11
  • 92

java项目中遇到的问题及解决办法002

1.JS错误。做项目时,很容易出现JS错误..JS因为没有明确错误提示,所以特别难找....
  • yechen2000
  • yechen2000
  • 2013年09月04日 22:23
  • 701

Oracle 11g 开始使用时遇到的一些问题及解决。

昨天下载了Oracle 11g 准备复习一下数据库。但在登陆时遇到了一些问题。 开始使用Oracle SQL Developer,准备建立一个连接。但是出现 ORA-12505: TNS: 监...
  • yujiajia111
  • yujiajia111
  • 2015年02月10日 15:36
  • 212
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 软件编程的一些问题
举报原因:
原因补充:

(最多只允许输入30个字)