版块
论坛
喜欢
话题
应用
搜索
登录
注册
wei_ziyong的个人空间
访问量
0
新鲜事
帖子
资料
http://bbs3.driverdevelop.com/index.php?m=space&uid=73001
线程造成内存泄露?
我在WIN32 DLL中用CreateThread()函数创建了一个线程,在线程中要使用一个64kbytes的堆空间,通过传给线程。函数线程能够正确的运行,但是当退出调用线程的程序后,出现了内存泄露的情况。 在线程中,我已经用delete函数释放了分配的64kbyt...
全文
回复
(
10
)
2004-06-07 20:35
来自版块 -
c/c++入门(VC,KeilC使用)
◆
◆
表情
告诉我的粉丝
提 交
wei_ziyong
:
谢谢各位!我再看看书和资料
(2004-06-09 12:26)
回复
Leonsoft
:
建议你去看看 Jeffer Richter那本经典名著 programming AP for windows 2000
(2004-06-09 11:05)
回复
walkonthesky
:
也不完全是 关键看你的调用约定 总共三种调用约定,你自己看看资料 我说过 线程同步可以解决你的问题 你自己试一下 我就不分析你的代码了
(2004-06-09 08:55)
回复
wei_ziyong
:
我的主要代码如下,你们帮我看看有什么不足,和错误,需要改正的! 谢谢! 在动态连接库中, 线程函数的定义如下: typedef struct DataInfo{ ULONG dwDSPAddr; PULONG ReturnAddr; ULONG ...
(2004-06-08 17:03)
回复
wei_ziyong
:
你的意思是不是,只要是传给DLL引出函数的指针,就只能够在只能在调用该函数的主程序中释放的指针? 那么我这里还有个问题,我要写的那个线程要不停的调用driver中的函数,从硬件设备读数据。那个线程能够不停的从设备读数据,要把数据不停的存放到应用程序传给线程的那个缓冲...
(2004-06-08 17:03)
回复
walkonthesky
:
线程同步,WOWOCOCK的方案是可行的方案
(2004-06-08 13:15)
回复
walkonthesky
:
DLL导出函数尊从__declspec调用约定,按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的。所以,你不能在DLL函数中释放内存,只能在调用该函数的主程序中释放的内存,即: 谁分配,谁释放; 谁污染,谁治理。
(2004-06-08 13:10)
回复
wei_ziyong
:
在要调用线程的主函数中分配64kBytes内存,然后,在把内存的地址传给在dll中的线程,当终止dll中线程的运行时,由dll中被调用的线程释放内存。 我使用了CC++运行期库函数_beginthreadex还时遇到了上述的问题阿。我发现在主线程中用malloc...
(2004-06-08 12:55)
回复
wowocock
:
在主线程中用GETEXITCODETHREAD来监控线程,当其退出后,在主线程中释放内存.
(2004-06-08 08:55)
回复
snowStart
:
你说的不大清楚,内存什么时候,在哪申请和释放 建议: 一般使用C\C++运行期库函数_beginthreadex可以避免这种问题, 或者你用线程同步,在适当的时候释放内存,
(2004-06-08 08:29)
回复
wei_ziyong
加关注
写私信
0
关注
0
粉丝
74
帖子
返回顶部