我最困扰的一次是写文件传输程序时犯的:
我通过下载一个文件头来得知文件大小和各文件数量,
然后分配一个int数组来保存各文件的传输成功情况,
结果我用malloc来分配时,忘记乘int的size,
使程序的堆被破坏,但这一粗心的失误一直没发现,
后来我实现将传输得到的位图文件绘制出来时,
发现一使用windows的载入位图文件函数程序就会立即退出,
(本来一般的windows版本有API支持以位图的缓冲指针直接绘制的,
但我的开发平台是winCE,只能以位图句柄绘图)百思不得其解,
我试了各种方法,用手工读bitmap文件载入位图,一行行检查文件传输函数,
还有创建私有堆来分配传输缓冲,都没发觉最初分配的数组,搞得项目几乎失败,
只好先实现其他的模块,到快到期限时我最后一次看代码,
想加些注释以便交差时才发现这个错误--在总结我试过的载入位图方法时想到了Windows载入位图时使用GetprocessHeap() 来获得进程的缺省堆,然后分配内存,也就是说缺省堆被破坏以致载入位图函数被强退,而当时我的传输缓冲都已经移到了私有堆里,于是我一行行看,马上就看到了那个忘了乘4的malloc参数,然后~~~~
后来我在大些的程序里创建私有堆来分配动态内存,这种小问题在代码量一大起来后很难发现,尤其是一般不会出问题,堆被破坏后你再分配使用都不会发现问题,但依赖进程缺省堆的API就会隔屁。
这种白痴级问题各位大哥也许不会犯,在这里仅供抛砖引玉
我通过下载一个文件头来得知文件大小和各文件数量,
然后分配一个int数组来保存各文件的传输成功情况,
结果我用malloc来分配时,忘记乘int的size,
使程序的堆被破坏,但这一粗心的失误一直没发现,
后来我实现将传输得到的位图文件绘制出来时,
发现一使用windows的载入位图文件函数程序就会立即退出,
(本来一般的windows版本有API支持以位图的缓冲指针直接绘制的,
但我的开发平台是winCE,只能以位图句柄绘图)百思不得其解,
我试了各种方法,用手工读bitmap文件载入位图,一行行检查文件传输函数,
还有创建私有堆来分配传输缓冲,都没发觉最初分配的数组,搞得项目几乎失败,
只好先实现其他的模块,到快到期限时我最后一次看代码,
想加些注释以便交差时才发现这个错误--在总结我试过的载入位图方法时想到了Windows载入位图时使用GetprocessHeap() 来获得进程的缺省堆,然后分配内存,也就是说缺省堆被破坏以致载入位图函数被强退,而当时我的传输缓冲都已经移到了私有堆里,于是我一行行看,马上就看到了那个忘了乘4的malloc参数,然后~~~~
后来我在大些的程序里创建私有堆来分配动态内存,这种小问题在代码量一大起来后很难发现,尤其是一般不会出问题,堆被破坏后你再分配使用都不会发现问题,但依赖进程缺省堆的API就会隔屁。
这种白痴级问题各位大哥也许不会犯,在这里仅供抛砖引玉