一个由Pchar导致内存泄漏的问题(100分)

  • 主题发起人 主题发起人 hopfield
  • 开始时间 开始时间
H

hopfield

Unregistered / Unconfirmed
GUEST, unregistred user!
我发现如果Dll中输出的函数的返回值是Pchar型,Delphi在调用dll后,不会
释放Pchar型返回值所占用的内存。如果反复调用该Dll,程序占用的内存就会
直线上升。用MemProof也证实了我的发现。
并且在调用该Dll的程序中无法用Dispose或FreeMem释放返回值所占的内存,请问各位
大侠有什么好办法吗?
 
如果是自己写的dll,不妨不要返回pchar,把需要返回的指当做一个指针,从你的程序
中传递进去,调用完就可以释放了
 
我也想知道
 
是照DLL的说明吗?
 
用指针吧。
 
一般来说, DLL中不分配传出参数空间, 如果要分配的, 一定要有配套的函数去释放.

就象微软的 FindFirstFile 与 FindClose, Netxxx函数与 NetApiBufferFree一样.
 
一般谁开辟的空间,谁负责释放;
如你所说这种情况,一般都是DLL开辟的空间,所以在DLL一定有释放它的函数;
否则这个DLL不能用;
(DLL开辟的空间,一般调用者不能释放)
 
自然是不会释放的,是这个dll做得不好
有多种方法可以解决的:一是用var带参数进出,先申请了空间带进出,出来再释放;二是干脆自己用完后强制释放
 
欢迎各位大虾参与讨论。我已经尝试过用Var型的Pchar参数,确实可以释放内存了.不过我
还有两个问题:
1、Var型的Pchar参数在VC中怎么声明,用char *或lpstr就可以吗?
2、在dll中函数返回值占用的内存空间到底是由谁负责释放的?如果没人释放,那企
不是任何返回值都会引起内存的泄漏吗?
 
1、Var型的Pchar参数在VC中怎么声明,用char *或lpstr就可以吗?
char **
指针的指针
2、在dll中函数返回值占用的内存空间到底是由谁负责释放的?如果没人释放,那企
不是任何返回值都会引起内存的泄漏吗?
dll中应提供释放函数,由调用者释放;
 
多人接受答案了。
 
后退
顶部