软件编程的一些问题

原创 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

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

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

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

相关文章推荐

实时软件编程问题

实时控制系统编程问题 >>编程语言区别于一般计算机的C语言编译器     单片机中的C 语言编译器提供多级代码优化, 以提高编译效率。 但是仅仅利用编译器的自动优化功能, 还不能很好地满足系统的...

四平方和----蓝桥杯软件编程

四平方和四平方和定理,又称为拉格朗日定理。每个整数都能表示为至多4个数的平方和。 如果把0算进去,就正好可以表示为4个数的平方和。 对于给定的一个正整数,可能存在多种平方和的表示方法。要求你对4个数进...

华为软件编程规范学习(五)--变量、结构

转自:http://blog.csdn.net/ce123/article/details/8886504 华为软件编程规范学习(五)--变量、结构 5-1:去掉没必要的公共变量 ...

计算机软件编程英语词汇集锦

Access Control List(ACL) 访问控制列表  access token 访问令牌  account lockout 帐号封锁  account policies 记帐策略  ...

书:计算机网络高级软件编程技术(P88) 之 基础训练:路由追踪程序的实现(tracert程序)

1. 发ICMP的包的时候,如果自行构建ICMP包的话,那么发送到外网时,填的mac地址是网关的地址。...

华为软件编程规范和范例

目  录 1 排版62 注释113 标识符命名184 可读性205 变量、结构226 函数、过程287 可测性368 程序效率409 质量保证4410 代码编辑、编译、审查5011 代码测试、维护5...

华为软件编程规范和范例

〔一〕 =====[ 排版 ] ¹1-1 :程序块要采用缩进风格编写,缩进的空格数为4 个 说明:对于由开发工具自动生成的代码可以有不一致。   ¹1-2 :相对独立的程序块之间、变量...
  • ypist
  • ypist
  • 2012年07月22日 21:56
  • 974

华为软件编程规范和范例

华为软件编程规范和范例
  • educast
  • educast
  • 2011年01月06日 21:39
  • 743

软件编程网站收集

1.网站收集1.12 Sites That Will Teach You Coding for Free 2.自学成才 16个非常优秀的在线教育网站 3.两岸三地在线编程学习网站大搜罗 4.又好...

软件编程中的 ABI/EABI 简介及其相关

ABI是系统与应用之间的协议. 一个BINARY(EXEC, LIB)必需符合ABI才能在相应的系统上运行. 比如我在PC上用不管什么样的COMPILER, 只要产生符合LINUX的ELF文件, 用...
  • mycoolx
  • mycoolx
  • 2011年11月16日 10:56
  • 809
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 软件编程的一些问题
举报原因:
原因补充:

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