动态链接库里面分配内存的问题

kingstarer 2010-04-27 10:08:43
在动态链接库里面new出来的内存会在dll卸载时失效(具体表现是,new返回一个对象指针,在动态链接库卸载后再delete会出错)

有没有办法做到动态链接库卸载后这部分内存仍保留呢?
...全文
442 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
everbeing 2010-10-07
  • 打赏
  • 举报
回复
delete []m_ptr; //掉了
everbeing 2010-10-07
  • 打赏
  • 举报
回复
用GlobalAlloc,GlobalFree代替


或者在dll里面写个管理类
class ManageMemory
{
public:
virtual void* New(size_t size) //注意前面加virtual
{
m_ptr=new char[size];
return m_ptr;
}
virtual void* Delete()
{
if(m_ptr)
{
delete m_ptr;
m_ptr=NULL;
}
}
private:
void* m_ptr;
};

//简单的封装 然后内存分配释放全部调用New/Delete
kingstarer 2010-04-29
  • 打赏
  • 举报
回复
还是想不明白ls的意思
==========
现在我的情况是这样的
定义了一个接口IA;
动态链接库里面提供了一个函数,返回一个指向IA子类的对象
IA *getChild() { return new Child();} //Child的实现不在exe里面
exe里面打开动态链接库调用getChild
==========
获得的指针会一直持续用到程序结束,而动态链接库则不再需要调用
==========
所以我想获得指针后就关闭动态链接库,节省点资源
但是发现这样一关,指针所指向的内存就失效了
==========
不知道用智能指针如何处理这样的情况?
「已注销」 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kingstarer 的回复:]

引用 1 楼 loaden 的回复:
智能指针:shared_ptr

智能指针也不行 只要dll卸载后操作里面分配的内存就会出错

==================
我现在的程序需要在启动时从dll里面获得一些对象
并一直用到程序结束才释放
所以如果我在程序结束前释放了dll则会导致这些对象析构时出错
但如果不显式释放dll又感觉不好
所以想找办法让dll分配对象空间时……
[/Quote]
我的意思是:从EXE向DLL传递一个智能指针。
kingstarer 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 loaden 的回复:]
智能指针:shared_ptr
[/Quote]
智能指针也不行 只要dll卸载后操作里面分配的内存就会出错

==================
我现在的程序需要在启动时从dll里面获得一些对象
并一直用到程序结束才释放
所以如果我在程序结束前释放了dll则会导致这些对象析构时出错
但如果不显式释放dll又感觉不好
所以想找办法让dll分配对象空间时分配到程序堆中,而不要分配到dll堆中
taodm 2010-04-27
  • 打赏
  • 举报
回复
自己建拷贝。内存谁申请谁释放
LENOVO_ 2010-04-27
  • 打赏
  • 举报
回复
关注,学习!
do_fork 2010-04-27
  • 打赏
  • 举报
回复
谁分配谁释放
「已注销」 2010-04-27
  • 打赏
  • 举报
回复
智能指针:shared_ptr

65,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧