社区
C++ 语言
帖子详情
动态链接库里面分配内存的问题
kingstarer
2010-04-27 10:08:43
在动态链接库里面new出来的内存会在dll卸载时失效(具体表现是,new返回一个对象指针,在动态链接库卸载后再delete会出错)
有没有办法做到动态链接库卸载后这部分内存仍保留呢?
...全文
442
9
打赏
收藏
动态链接库里面分配内存的问题
在动态链接库里面new出来的内存会在dll卸载时失效(具体表现是,new返回一个对象指针,在动态链接库卸载后再delete会出错) 有没有办法做到动态链接库卸载后这部分内存仍保留呢?
复制链接
扫一扫
分享
转发到动态
举报
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
进程间通信 -
动态链接库
中共享内存
前言 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据,以及其他的一些资源组成。32位系统的进程分配4G的虚拟地址空间。内存地址范围是0x00000000~0xFFFFFFFF。这个内存地址空间是每个进程独立的,也就是说,在一个进程中是不能访问其他进程的地址空间的。 举个例子,进程A的内存里保存了一个数据,假设这个数据的地址是0x33333333。这个是时候,即使把
C++跨动态库dll内存分配与释放
问题
总结
结论: 如果两个dll(或者exe调用dll)的CRT链接为MD,则可以跨动态库分配和释放;如果一个是MT,另一个是MD则会有
问题
(比如崩溃)。 利用虚函数的动态绑定技术,动态绑定分配释放内存的new和delete等,可以解决上述1的
问题
,例如shared_ptr的实现。但如果shared_ptr包装是vector等类型,在调用和被调用中都涉及到vector的修改的话,仍然会有
问题
,因为两个地方都会有释放和分配。 详情见以下两个文章: 跨dll的内存分配释放
问题
智能指针shared_ptr为何可以实
Linux[链接]: 静态链接,动态链接及linux进程内存布局
Linux[链接]: 静态链接,动态链接及linux内存布局 一. 目标文件 1.1 目标文件概述 现在PC平台流行的可执行文件格式,主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format),它们都是COFF(Common file format)格式的变种。 目标文件就是源代码编译后但未进行链接的那些中间文...
C++
动态链接库
的使用
本文详细介绍了C++中
动态链接库
的使用
C++
动态链接库
和静态链接库
今天对C++生成动态链接路和静态链接库非常感兴趣,必须搞定,否则都没有心情干其他事了。Let’s go~ 文章目录源程序编译链接生成文件格式预编译编译和优化编译优化生成目标文件链接什么是库?动态静态的区别静态链接库静态链接库的创建方法lib的调用
动态链接库
动态链接库
的创建方法dll的使用隐式链接显式链接 源程序编译链接生成文件格式 首先贴出从源程序生成可执行文件的过程。 源程序(sour...
C++ 语言
65,183
社区成员
250,527
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章