- 主题:主程序申请的资源是否应该在dll里面释放?
由于某种原因,需要传个指针到dll中,在主程序中申请,那么释放时,在dll中释放是否是好的方法?
--
FROM 114.249.192.*
听起来似乎应该是在主程序中释放。一般的原则是谁借谁还。
【 在 anything1999 的大作中提到: 】
: 由于某种原因,需要传个指针到dll中,在主程序中申请,那么释放时,在dll中释放是否是好的方法?
--
FROM 216.240.30.*
每个文件模块(指的是dll/exe)有自己的CRT heap,必须释放到对应的heap中,否则就是heap corruption。
所以如果是malloc/free、new/delete的话,必须由原模块来释放。
如果是VirtualAlloc这种,那就随便谁来释放了,反正是进程内的dll/exe共享的。
--
FROM 125.35.123.*
在windows下会死, 跨进程边界了
【 在 anything1999 的大作中提到: 】
: 由于某种原因,需要传个指针到dll中,在主程序中申请,那么释放时,在dll中释放是否是好的方法?
--
FROM 115.193.184.*
笔误了,是cross module boundary
静态链接到CRT、动态链接到CRT,也有区分。
https://devblogs.microsoft.com/oldnewthing/20060915-04/?p=29723
【 在 ziqin 的大作中提到: 】
: 在windows下会死, 跨进程边界了
:
--
修改:z16166 FROM 125.35.123.*
FROM 125.35.123.*
new delete只要是同一编译器版本relase/debug, 不同模块释放没啥问题
【 在 z16166 的大作中提到: 】
: 每个文件模块(指的是dll/exe)有自己的CRT heap,必须释放到对应的heap中,否则就是heap corruption。
: 所以如果是malloc/free、new/delete的话,必须由原模块来释放。
: 如果是VirtualAlloc这种,那就随便谁来释放了,反正是进程内的dll/exe共享的。
: ...................
--
FROM 221.219.211.*
各自静态链接到CRT的不行
new/malloc在最后都会走到下面这句。每个静态链接到CRT的,会有不同的heap句柄__acrt_heap。
void* const block = HeapAlloc(__acrt_heap, 0, actual_size);
C:\Program Files (x86)\Windows Kits\10\Source\10.0.22000.0\ucrt\heap\malloc.cpp
【 在 iwantfly 的大作中提到: 】
: new delete只要是同一编译器版本relase/debug, 不同模块释放没啥问题
:
--
FROM 125.35.123.*
动态库,一个进程里面,甚至一个线程里面;目前我在dll里面,正常的。
【 在 ziqin 的大作中提到: 】
: 在windows下会死, 跨进程边界了
:
--
FROM 114.242.248.*
有事的,碰到过,会crash
【 在 iwantfly 的大作中提到: 】
: new delete只要是同一编译器版本relase/debug, 不同模块释放没啥问题
:
--
FROM 123.123.52.*