首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存分配断点不会停止执行。

内存分配断点不会停止执行。
EN

Stack Overflow用户
提问于 2011-10-20 13:32:20
回答 1查看 857关注 0票数 2

我有一段JNI代码有一个mem泄漏:

代码语言:javascript
复制
Detected memory leaks!
Dumping objects ->
{76} normal block at 0x277522F8, 52 bytes long.
 Data: < "u' "u' "u'    > F8 22 75 27 F8 22 75 27 F8 22 75 27 CD CD CD CD
Object dump complete.

因此,我在指定的内存分配号(本例中为76)上设置了一个断点。

代码语言:javascript
复制
_crtBreakAlloc = 76;

但是,应用程序永远不会停止执行,就像从未执行分配一样。

我还在程序开始和结束时拍摄了两张内存快照,并对它们进行了比较。

(代码开头):

代码语言:javascript
复制
_CrtMemCheckpoint( &s1 );

(在代码末尾):

代码语言:javascript
复制
_CrtMemCheckpoint( &s2 );

_CrtMemState s3;
_CrtMemDifference( &s3, &s1, &s2);
_CrtMemDumpStatistics( &s3 );

这里的结果是:

代码语言:javascript
复制
0 bytes in 0 Free Blocks.
0 bytes in 0 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 2839 bytes.
Total allocations: 101483 bytes.

看来一切都还好。

我不知道发生了什么。这是假阳性漏药吗?或者是JVM的备忘录泄漏?如果是的话,有什么方法可以检测到吗?

在找到解决方案后添加:

我修改了静态map的初始化,这个问题已经解决了。特别是,我将私有静态成员从map转换为map*。问题是,当您初始化一个静态时,它必须用一个常量初始化。下面是如何更改静态成员的声明:

代码语言:javascript
复制
static const map<wstring, enumValue>* mapParamNames;

所以我的initialize()方法变成:

代码语言:javascript
复制
map<wstring, paramNames>* m = new map<wstring, paramNames>();
(*m)[L"detectCaptions"] = detectCaptions;
(*m)[L"insertEmptyParagraphsForBigInterlines"] = insertEmptyParagraphsForBigInterlines;
(*m)[L"fastMode"] = fastMode;
(*m)[L"predefinedTextLanguage"] = predefinedTextLanguage;
(*m)[L"detectFontSize"] = detectFontSize;
(*m)[L"saveCharacterRecognitionVariants"] = saveCharacterRecognitionVariants;
(*m)[L"detectBold"] = detectBold;
(*m)[L"saveWordRecognitionVariants"] = saveWordRecognitionVariants;

KernelParamsSetter::mapParamNames = m;

最后,我将映射的delete插入到类析构函数中:

代码语言:javascript
复制
delete KernelParamsSetter::mapParamNames;

希望这对某人有用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-20 13:39:18

一种可能是内存分配76发生在全局变量的静态初始化过程中。在这种情况下,您可能设置_crtBreakAlloc太晚,无法捕获分配。

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

https://stackoverflow.com/questions/7836705

复制
相关文章

相似问题

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