当前位置: 技术问答>linux和unix
第三方库内存泄露,怎么处理?
来源: 互联网 发布时间:2015-12-17
本文导语: 现在我要使用一个动态库,程序运行后动态加载该库,然后发现他泄露了内存?有什么好的解决办法么?谢谢! | 在另外一个进程调用第三方库,需要的话将对它的调用包装成无状态的。 ...
现在我要使用一个动态库,程序运行后动态加载该库,然后发现他泄露了内存?有什么好的解决办法么?谢谢!
|
在另外一个进程调用第三方库,需要的话将对它的调用包装成无状态的。
|
以上的一些解决办法有问题,如果第三方的库是静态库(.o、.lib、.obj之类),而且它把申请的指针返回了出来,那么你可以主动去释放,否则死路一条。
如果第三方的库是动态链接库(DLL),那么在任何情况下,即使你能得到这个指针也是没有办法了,因为new/delete或其它的内库管理函数都是基于内存管理库的,也就是当前进程,你是无法调用它的内存管理库函数的,你的程序delete它的指针,实质上只是把这个指针值调用你的内存管理库,由于你的内存分配表项中没有这个指针,好的情况是什么都没有发生,坏是情况是你的内存链表被破坏,程序崩掉或出现莫名其妙的后果。所以说,你还是去找开发商,这是唯一正解。
如果第三方的库是动态链接库(DLL),那么在任何情况下,即使你能得到这个指针也是没有办法了,因为new/delete或其它的内库管理函数都是基于内存管理库的,也就是当前进程,你是无法调用它的内存管理库函数的,你的程序delete它的指针,实质上只是把这个指针值调用你的内存管理库,由于你的内存分配表项中没有这个指针,好的情况是什么都没有发生,坏是情况是你的内存链表被破坏,程序崩掉或出现莫名其妙的后果。所以说,你还是去找开发商,这是唯一正解。
|
首先你怎么获得这个指针呢?
然后,你怎么确定这个指针所指的内存以后不用了呢?
使用第三方库,接口的内存指针传递不过几种形式,char * , void * ...
在自己的代码中确定结束程序,或者释放第三方DLL时候
就可以执行这个动作了
当然,如果对方导致泄漏的内存指针不传递出来
那就没办法了,不过一般情况下,这类指针都是会传递出来的
一定要钻牛角那就没办法
然后,你怎么确定这个指针所指的内存以后不用了呢?
使用第三方库,接口的内存指针传递不过几种形式,char * , void * ...
在自己的代码中确定结束程序,或者释放第三方DLL时候
就可以执行这个动作了
当然,如果对方导致泄漏的内存指针不传递出来
那就没办法了,不过一般情况下,这类指针都是会传递出来的
一定要钻牛角那就没办法
|
什么库?
先弄清楚是使用不当造成的,还是的确是第三方库的问题.
先弄清楚是使用不当造成的,还是的确是第三方库的问题.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。