1

你好stackoverflower,

操作系统:Windows 7 x64 SP1;待定版本:4.2.0;编译器:Visual Studio 2012。

问题描述:

TBB 在 MFC 应用程序退出时转储内存泄漏。当从简单的命令行程序中使用时,相同的代码不会转储任何泄漏。它看起来像一个 DLL 卸载顺序问题。由于延迟 tbb.dll 卸载调试器将一些静态变量作为泄漏转储。

有人可以确认这个问题吗?有什么解决办法吗?

我也在英特尔论坛上发布了这个问题。在那里您可以找到两个测试应用程序:命令行和 MFC。

这是内存转储:

Detected memory leaks!
Dumping objects ->
{608} normal block at 0x00457970, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{607} normal block at 0x00457918, 28 bytes long.
 Data: <    pyE         > 00 00 00 00 70 79 45 00 98 0F 00 00 00 00 00 00
{605} normal block at 0x0044ED98, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{590} normal block at 0x00450AD8, 28 bytes long.
 Data: <      D         > 00 00 00 00 98 ED 44 00 04 20 00 00 00 00 00 00
{583} normal block at 0x00455AD8, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{582} normal block at 0x00455A80, 28 bytes long.
 Data: <     ZE  .      > 00 00 00 00 D8 5A 45 00 98 2E 00 00 00 00 00 00
{580} normal block at 0x00455860, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{579} normal block at 0x00455808, 28 bytes long.
 Data: <    `XE         > 00 00 00 00 60 58 45 00 EC 18 00 00 00 00 00 00
{569} normal block at 0x00453EC8, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{568} normal block at 0x00453E70, 28 bytes long.
 Data: <     >E  0      > 00 00 00 00 C8 3E 45 00 FC 30 00 00 00 00 00 00
{566} normal block at 0x00453C50, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{565} normal block at 0x0044D338, 28 bytes long.
 Data: <    P<E         > 00 00 00 00 50 3C 45 00 D8 08 00 00 00 00 00 00
{546} normal block at 0x0044F248, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{536} normal block at 0x00451128, 28 bytes long.
 Data: <    H D  !      > 00 00 00 00 48 F2 44 00 14 21 00 00 00 00 00 00
{531} normal block at 0x00450518, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{530} normal block at 0x004504C0, 28 bytes long.
 Data: <      E T!      > 00 00 00 00 18 05 45 00 54 21 00 00 00 00 00 00
{528} normal block at 0x00450290, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{527} normal block at 0x00450238, 28 bytes long.
 Data: <      E 8       > 00 00 00 00 90 02 45 00 38 18 00 00 00 00 00 00
{518} normal block at 0x0044EE68, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{517} normal block at 0x0044EE10, 28 bytes long.
 Data: <    h D  2      > 00 00 00 00 68 EE 44 00 B0 32 00 00 00 00 00 00
{507} normal block at 0x0044B190, 36 bytes long.
 Data: <T B B   W o r k > 54 00 42 00 42 00 20 00 57 00 6F 00 72 00 6B 00
{505} normal block at 0x0044D3B0, 28 bytes long.
 Data: <      D  '      > 00 00 00 00 90 B1 44 00 18 27 00 00 00 00 00 00
Object dump complete.
The program '[12168] TbbMfcTest.exe: Native' has exited with code 0 (0x0).
4

1 回答 1

1

如果您监视 TBB 源,似乎 TBB 分配了一个内存块而没有适当地释放它(即 market::create_one_job() 为 h->nameW 分配了一个名称和 _wcsdup(name))。

如果确实如此,最好向英特尔报告此情况,但请注意,如果这确实是真正的内存泄漏,可能会引起讨论。我们喜欢在输出窗口中保留零内存转储报告,因为很快我们就无法区分真实的和无害的。

于 2015-05-18T16:12:51.617 回答