软件编程的一些问题
来源:互联网 发布:山东大学java考试题 编辑:程序博客网 时间:2024/05/07 12:35
最近编写软件的时候,多次在程序运行时出现内存不足,Access Violation After normal block等问题,当在程序最开始运行的时候出现这种问题还好解决,关键是我这个软件是需要多次读取文件数据,因此问题就出来了,最开始读取5,6个文件还是很理想的,然后连续读取第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大小的内存,却写入了x+y (y>0)的数据,结果导致了这样的错误。由于错误发生的地点与导致错误发生的地点并一定相邻,导致查找错误很困难,对于内存一定要小心再小心。其实大多数莫名其妙的错误都是由内存越界操作引起的
其为CSDN的专栏,网址为:
http://blog.csdn.net/hbrr224/archive/2006/12/23/1456366.aspx
看了这个描述,我有点豁然开朗的感觉了,很可能就是因为我申请的指针内存不够,导致了内存越界操作。很快我就找到了我那申请内存的指针,于是我开始了我那单步跟踪调试的伎俩,很快,我就发现了,我在申请内存的时候,申请内存数量的那两个变量还没有被初始化,我的天啊,原来在这里,我可算是找到你了,呵呵。
至此,我那小小软件的问题终于得以解决了,还是那句话,对于内存的操作实在是要小心再小心,很多莫名其妙的错误,摸不着头脑的错误,该死的错误,都是这些可爱的内存操作不当所引起的。
最后,程序员,实在是感觉不爽啊,哎~~~~~~~~,调个错误要花好长时间啊,尤其是像我等编码很不规范的来说,这个调试简直就是要命啊。:(
- 软件编程的一些问题
- 编程软件一些配置问题
- 编程的一些问题
- 关于“自动编程软件”的一些问答
- 编程人需要掌握的一些软件
- 关于编程的一些小软件
- 关于“自动编程软件”的一些问答
- 关于软件编程的问题
- 关于图形化编程软件sikuli 初学者使用时可能容易出现的一些问题
- 一些编程注意的问题
- 编程工具的一些问题
- alsa编程的一些问题
- 编程工具的一些问题
- 编程遇到的一些问题
- 网络编程的一些问题
- 网络编程的一些问题
- 并发编程的一些问题
- 软件开发中遇到的一些问题
- QQ界面的简单模拟
- 在ubuntu下修改mp3乱码问题
- ACE封装——简化常见形式
- 编写自己的登录与访问控制模块
- How to monitor your website
- 软件编程的一些问题
- 串操作
- Java程序员的推荐阅读书籍
- UCWEB手机浏览器(可以和opera mini 媲美的手机浏览器)
- 如何扩展GridView之个性分页
- Queue Operator
- SWF动画中,取每一帧里指定坐标点的颜色!!
- Windows将被Linux取代吗?
- com实现三层设计