在函数中定义
FileHandle不是局部变量, 函数结束之后就会自动释放,为什么还要CloseHandle呢. HANDLE FileHandle=NULL;
FileHandle=CreateFile.....
CloseHandle(FileHandle);这两句有什么区别,如果在函数内定义,作为局部变量,在函数结束之前需要释放吗
ImageByte=new byte[JI.ImageLenth];
ImageByte=new byte(JI.ImageLenth);

解决方案 »

  1.   

    handle实际上可以这样认为,是系统内部的数组索引,你把索引释放了不释放索引里面的内容的么??
    比如 map<int, char*> int 当然不用释放,但是char*里面的内容是要释放的
      

  2.   

    CloseHandle 不等于释放局部变量的释放 与 delete 效果不相等
      

  3.   

    ImageByte=new byte[JI.ImageLenth]; ImageByte=new byte(JI.ImageLenth); 那括号和方括号有什么区别吗
      

  4.   

    ImageByte=new byte[JI.ImageLenth]; 
    申请JI.ImageLenth这么多个byte的空间ImageByte=new byte(JI.ImageLenth); 
    申请一个byte并用JI.ImageLenth初始化
      

  5.   

    你可以这么理解,操作系统维护了一个列表,存储了所有的HANDLE.即使进程销毁了,HANDLE你不CLOSE的话,操作系统依旧记着他,这样时间长了会造成句柄越来越多,多到一定程度,系统就申请不出来东西了。
    以前我遇到过一个程序就是这样一种情况,可以称之为句柄泄漏,最后句柄多达几万个,出现了很多莫名其妙的故障。你的机器如果打开/3GB选型的话,这种情况会出现的更快。
      

  6.   

    所有的核心对象都不会因为进程的销毁而自己销毁的,他的生存周期要大于进程。楼主看看《WINDOWS核心编程》,里面写的很清楚。