CNDEV
CNDEV.ORG
当前在线
论坛
CBD
程序员情感CBD
程序员见面交流会
CBD开发区
Java/J2ME
.NET/C#
数据库
Delphi/BCB
Visual C
其它
修真养身
中国象棋
纪念日
谈钱太俗,还是投机吧
听音乐
iCosta
资源共享
一隅
好文共赏
看电影看美剧
待定
狗屎
雪域召唤
工作流
专业显摆区
语录
情感
批评与自我批评
爱情故事
发牢骚
看三点区
游戏
CNDEV-CS/WOW
浩宇长空
生活
家有XPH
我爱学英语
美食天地ORG
半调子体育迷
观澳园友邻
搞笑奇文
拍照片
我读书我存在
论坛系统
超级垃圾站
系统建议及BUG
系统测试
中国开发网
: 论坛:
程序员情感CBD
: 贴子 286289
zhenghj
: bcb里动态生成的时候不要用vcl很容易出问题,应该用IXMLDocment,到borland网站里可以查到说明
[阅读: 476] 2006-02-19 07:34:52
<空>
相关信息:
【HLP!】请各位帮忙看看这个内存泄漏问题,该如何解决?
(903字)
(
Fish
[1878]
2006-02-18 08:06
)
直接引用图片好像看不到,另附链接如下:
(226字)
(
Fish
[585]
2006-02-18 08:12
)
请pp、火腿肠、贫血、活力牛、李鸡蛋等熟悉C++和COM的人士援手!
(空) (
Fish
[531]
2006-02-18 08:23
)
很简单
(6字)
(
leejd
[457]
2006-02-18 08:41
)
是不是你的 BSTR 用法有问题呃?
(空) (
没脾气2x
[707]
2006-02-18 08:47
)
有可能,AnsiString的c_str()内存泄漏已经是。。。
(空) (
leejd
[955]
2006-02-18 08:52
)
这个也有内存泄漏?俺也常用啊
(空) (
Fish
[407]
2006-02-18 09:10
)
不知道后续修正没有,反正俺一直用的(char*)Str.data()
(空) (
leejd
[483]
2006-02-18 09:21
)
代码片段贴在回复老玉米的帖子里面了,帮忙看看?
(空) (
Fish
[495]
2006-02-18 09:09
)
赫赫。。。分析出的内存泄漏电在msxml内不代表就是msxml的内存泄漏。。。
(106字)
(
老玉米
[666]
2006-02-18 08:51
)
当然,我相信是我们的代码的问题,但是我现在不知道该怎么做。贴出代码片段,请指点一下
(731字)
(
Fish
[638]
2006-02-18 09:06
)
很就不用bcb,怀疑WideString这句很可能有问题。。
(19字)
(
老玉米
[738]
2006-02-18 09:20
)
狠有可能。我们也在怀疑这一点。刚才已经尝试改成 CComBSTR,结果测试发现内存泄漏点转移到了下一行,继续分析尝试中
(空) (
Fish
[574]
2006-02-18 09:32
)
WideString 是临时的, 马上就析构了.array[i].xxNo 是什么东东?
(14字)
(
holly
[511]
2006-02-18 09:26
)
array[xx].field 是传递进来的一个数组,对应着某数据集的结构。这个内存有分配和释放
(空) (
Fish
[522]
2006-02-18 09:31
)
我怀疑中间可能进行了不止一次的cast..
(空) (
老玉米
[419]
2006-02-18 09:50
)
是不止一次。例如,某个地方使用了 put_text( StringToOleStr( ... ) ),结果调用层次如下
(771字)
(
Fish
[779]
2006-02-18 10:03
)
所以你要确保每一步都是正确的。。建议不要用vcl,直接调用msxml com
(16字)
(
老玉米
[456]
2006-02-18 10:06
)
是啊是啊。但是现在改,好像工作量太大了,很快就要提交了
(空) (
Fish
[554]
2006-02-18 10:15
)
XMLDOC 是 VCL 还是 Import 进来的 com ??
(空) (
没脾气2x
[459]
2006-02-18 11:20
)
是VCL。问题已经基本查明,是使用了 BSTR 之后,没有释放的问题。待俺改好之后写个小结
(空) (
Fish
[539]
2006-02-18 11:27
)
怎么和 TXMLDocument 定义的不一样?我在奇怪,为什么你的 CComBSTR 和 WideString 混在一个层的程序中使用
(空) (
没脾气2x
[479]
2006-02-18 11:37
)
这个TXMLDocument我不知道。我对XML是一知半解。程序中的关于XML部分的代码是其他同事写的,俺也不是很清楚,现在是赶鸭子上架
(空) (
Fish
[517]
2006-02-18 12:41
)
问题应该出在这个WideString(Delphi的?我在msdn上没有查到)上,我在网上搜了一蛤,这个WideString似乎比较诡异,你换一个字串转换的东西用吧,array[i……
(274字)
(
周星驰
[905]
2006-02-18 11:38
)
array[i].RecordNo是char assign的?那么CComBSTR就可以
(空) (
周星驰
[524]
2006-02-18 11:39
)
WideString是Delphi/BCB的。代码里用这个可以通过编译器,应该是进行了隐藏的类型转换。在转换成BSTR过程的中,隐含地分配了BSTR内存,但是没有释放
(空) (
Fish
[805]
2006-02-18 12:43
)
..
(空) (
nostalgic
[380]
2006-02-18 10:07
)
实际使用中感觉内存会一直增长嘛?
(32字)
(
王中王
[504]
2006-02-18 11:13
)
是呀是呀
(空) (
没脾气2x
[384]
2006-02-18 11:23
)
不是感觉,是实际增长未释放。在之前的试用中,很快就增长到几百兆,将内存几乎耗尽
(空) (
Fish
[562]
2006-02-18 11:31
)
工具还是很有用的,这次俺是再次体会到了,对于跟踪什么的很有效。其实放开点理解,IDE也是工具嘛
(空) (
Fish
[418]
2006-02-18 11:33
)
你用的什么工具?
(空) (
pcplayer
[396]
2006-02-18 13:53
)
主要用的是 Turbopower 的 Memory Sleuth 3.01,针对 BCB 和 Delphi,可以将分析结果与对应的源代码联系起来
(209字)
(
Fish
[911]
2006-02-18 14:08
)
问题基本解决,小结一下
(2201字)
(
Fish
[679]
2006-02-18 14:02
)
不关IXMLDomElement::put_text的事儿,可以确定的是这个WideString应该有问题。
(260字)
(
周星驰
[682]
2006-02-18 14:23
)
回头试下你的方法。从目前的测试结果来看,可以说是不关put_text的事情,是自己对其参数使用不当。另外,widestring应该是没有问题的
(空) (
Fish
[639]
2006-02-18 14:27
)
你那个总结,大概意思是不是使用字符串的人要负责释放?
(空) (
pcplayer
[508]
2006-02-18 14:43
)
对,是这个意思
(空) (
Fish
[439]
2006-02-18 14:52
)
我再看了一次你的总结,意思似乎是不管哪种情况,都是调用COM的客户端来释放?又似乎是使用字符串那一端负责释放。俺不太清楚了,乱了乱了。。。
(空) (
pcplayer
[563]
2006-02-18 15:23
)
是啊,都是在函数外释放内存。如果是函数的参数是BSTR,则在函数外面分配内存;如果函数内部分配了内存,也要在外面释放
(空) (
Fish
[631]
2006-02-18 15:39
)
你用的什么版本?XmlDocment的CreateElement函数原型好象不大一样?
(空) (
王中王
[664]
2006-02-18 16:00
)
BCB6自己封装的那个,不是导入的MS的
(空) (
Fish
[482]
2006-02-18 16:12
)
我看到的是这个:
(123字)
(
王中王
[514]
2006-02-18 16:25
)
我的是这样
(1014字)
(
Fish
[577]
2006-02-19 00:25
)
VCL封闭一些COM对象的时候,往往会把原始的对象、接口通过属性的方式暴露出来
(525字)
(
王中王
[573]
2006-02-19 08:56
)
指教的是,俺理解有误。又看了一下代码之后,认识到确实都是和 COM 打交道
(空) (
Fish
[440]
2006-02-19 09:41
)
今天又测试了一下,昨天的小结有错误
(1587字)
(
Fish
[613]
2006-02-19 02:10
)
奇怪,既然决定使用VCL封装好的,为什么不直接用TXmlDocument的相关方法,而却直接引用“晦涩”的DomDocument呢?
(25字)
(
王中王
[575]
2006-02-19 08:46
)
这部分代码是别人写的。我又仔细看了一下,应该是我搞错了,从代码来看,应该是用的msxml对象
(466字)
(
Fish
[631]
2006-02-19 09:39
)
bcb里动态生成的时候不要用vcl很容易出问题,应该用IXMLDocment,到borland网站里可以查到说明
(空) (
zhenghj
[475]
2006-02-19 07:34
)
这样啊,我再看看
(空) (
Fish
[428]
2006-02-19 08:10
)
欢迎光临本社区,您还没有登录,不能发贴子。请在
这里登录