社区
进程/线程/DLL
帖子详情
在dll中分配内存
savage54321
2004-04-20 11:02:33
刚才看到一个帖子。很confused所以拿来向高手请教。
如在dll中有
void __declspec( dllexport ) int* Fun(int size)
{
return (int *) malloc(size)
}
在app中调用如下
int * p=Fun(1024);
//问题是什么时候释放指针。在dll中还是在app中?
...全文
28
14
打赏
收藏
在dll中分配内存
刚才看到一个帖子。很confused所以拿来向高手请教。 如在dll中有 void __declspec( dllexport ) int* Fun(int size) { return (int *) malloc(size) } 在app中调用如下 int * p=Fun(1024); //问题是什么时候释放指针。在dll中还是在app中?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
savage54321
2004-04-20
打赏
举报
回复
呵呵,没看到houstond(东方浩气)同学的帖子,要不我就不问了
savage54321
2004-04-20
打赏
举报
回复
为什么在dll中的分配的指针一定要在dll中delete掉呢?而不是在app delete掉
savage54321
2004-04-20
打赏
举报
回复
为什么在dll中的分配的指针一定要在dll中delete掉呢?而不是在appdelete掉
houstond
2004-04-20
打赏
举报
回复
再补充一句:
这是M$的OS调用DLL的机制,其他平台不存在这个问题
houstond
2004-04-20
打赏
举报
回复
DLL有自己的HEAP,在一个HEAP动态分配的内存,不能在另外的HEAP中释放
houstond
2004-04-20
打赏
举报
回复
路漫漫 同学说的很正确,你自己去试验巩固加深记忆吧
drgnmvpn
2004-04-20
打赏
举报
回复
释放的方法就这一个啊.还有些底层分配、释放的API可以使用。但要用它们做什么呢?
savage54321
2004-04-20
打赏
举报
回复
哦!我刚才说错了。有一个malloc就应该有个free就释放一次。没问题。还有什么其他的方法吗?
drgnmvpn
2004-04-20
打赏
举报
回复
不对,是一次.为什么要释放两次.难道你是说要释放指针本身?
savage54321
2004-04-20
打赏
举报
回复
我试试吧!
savage54321
2004-04-20
打赏
举报
回复
这个我知道,但是我觉得要释放两次吧。一次是dll的指针一次是app中的指针
drgnmvpn
2004-04-20
打赏
举报
回复
在函数中传进参数,如上例就是p
savage54321
2004-04-20
打赏
举报
回复
呵呵,问题是你在dll中释放谁?
drgnmvpn
2004-04-20
打赏
举报
回复
只能在DLL中写个释放内存的函数,再在APP中调用它.否则就会出错
dll
远程线程注入(支持64bit win7)
把
dll
注入到远程线程。使用的时候创建一个空的工程,然后把代码当做主文件放到工程
中
,自己写个mian函数调用inject
DLL
函数就能注入了。菜鸟级友情提醒:64位别忘了编译成x64的可执行文件
memcached for window32
memcached for window 32位系统,mem版本为1.4.5,其
中
的几个bat文件,注意需要修改install.bat
中
的binPath参数。
EXE
中
释放
DLL
中
分配的内存
在
DLL
中
分配的内存,如果到其调用者
中
释放,可能会出现CRASH的情况,其原因在于: 在
DLL
中
的Code Generation如果是采用了MT(静态加载LIBCRTD.LIB)在该库
中
维护了一个allocator的对象对内存分配进行管理,当EXE
中
调用free等函数对内存进行释放时,他自己也维护了一个allocator对象(这个对象与
DLL
中
得对象不是同一个对象),所以在free时找不
DLL
分配的内存如何在EXE里面释放
总结下面几个要点: 1. 保证内存分配和清除的统一性:如果一个
DLL
提供一个能够
分配内存
的函数,那么这个
DLL
同时应该提供一个函数释放这些内存。数据的创建和清除应该在同一个层次上。 曾经遇到过这样的例子:在
dll
中
分配了一块内存,通过PostMessage将其地址传给应用。然后应用去释放它,结果总是报异常。 2.如果exe用 MFC Appwizard方式生成,
dll
用win32方式生成,
从 MSVCR90D.
DLL
中
分配内存
,但 AutoCAD 使用 MSVCR90.
DLL
的内存?
作为Virtual C++开发的初学者,对整个开发的一些常识不了解会造成很多问题。 MSVCR90D.
DLL
"D"为Debug版本。 在使用VS2008开发Cad2010 插件时,只添加了Debug的配置项而没有添加Release的配置项因此,cad才会加载失败 ...
进程/线程/DLL
15,467
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章