首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DIA x64 & LocalFree

DIA x64 & LocalFree
EN

Stack Overflow用户
提问于 2013-04-19 08:35:29
回答 2查看 226关注 0票数 0

我正在使用DIA Sdk从PDB文件中提取一些信息。我创建了一个非com的DiaSourceAlt对象,所以我必须使用LocalFree来释放字符串。

下面的代码在x86中运行良好,但在x64上,LocalFree调用会破坏堆。

代码语言:javascript
复制
IDiaSymbol *lpSymbol;
BSTR bStrName;

...
hRes = lpSymbol->get_undecoratedNameEx(0x87FE, &bStrName);
if (SUCCEDED(hRes))
  LocalFree(bStrName);

有什么建议吗?(我使用的是msdia90.dll)

你好,毛罗。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-20 20:47:47

在做了一些反向工程后,我发现必须传递"(LPBYTE)bstr - 4“,因为msdia##.dll使用LocalAlloc进行分配,并在将数据返回给用户之前将指针递增4。

我认为这个行为是为了模仿BSTR,它将字符串的长度存储在DWORD中,恰好在指针所指向的地址之前。我使用x64版本发现了这个问题。在x86中,虽然它有同样的问题,但应用程序不会崩溃,但会产生泄漏。

致以问候。

票数 0
EN

Stack Overflow用户

发布于 2016-04-25 23:31:57

在使用指针时一定要小心。LocalAlloc将指针递增4个字节。BSTR大小是word,因此您只能执行"LocalFree(bstr - 2)“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16095367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档