问题是这样的,前面文章有介绍过怎样从RAW转dng,包括工程配置,配置库编译方法以及如何写dng,原来测试的时候由于图片很少,转换的时候没有注意到内存泄露问题,领导航拍弄了3000多张的raw图需要转成dng,这下问题来了,任务管理器的内存眼看着上升,直到直接卡死,因为dng的类指针采用的都是智能指针,所以以为自己申请的空间释放掉就可以了,但是AutoPtr<dng_image>image(new
dng_simple_image(bounds,planes,pixelType,memalloc));声明的语句,如何也释放不掉了,寻寻觅觅寻寻觅觅,删除各种东西,改写人家的析构函数,就是删除不掉,整整找了大半天,咋么也搞不定,上火啊……最讨厌的就是内存泄露,内存泄露尤其讨厌的是指针导致的内存泄露,寻寻觅觅无处,上火无数,只有改变思路了。
首先,有new和malloc必须要有delete和free,智能指针声明函数中有new,就必须delete,但是要delete谁呢?image?不对,要看image指针的内存最后直到哪里去了,一开始找不到,就在最下面各种删除,没有效果。改变思路:申请的地方delete一下,有释放掉,说明delete就可以了,不需要什么析构函数。下一个传到那去了,delete一下,有释放掉,依次找或者直到自己的指针最终指向哪里了,直接在最后的时候delete就可以了。raw转dng,dng_negative
*negative = host.Make_dng_negative();negative写dng,所以最终的指针就是negative了,在最后delete negative就行了。
时间: 2024-11-02 05:24:25