私はlibuv-bookからhttps://nikhilm.github.io/uvbook/basics.htmlをコードスニペットを取り、次の簡単なコードでメモリリークのためにそれをテストした:デバッグウィンドウでlibuvには最も簡単な例でメモリリークがありますか?
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <stdio.h>
#include <uv.h>
int TestMemLeakage_uv_loop()
{
uv_loop_t *loop = (uv_loop_t*)malloc(sizeof(uv_loop_t));
uv_loop_init(loop);
printf("Now quitting.\n");
uv_run(loop, UV_RUN_DEFAULT);
uv_loop_close(loop);
free(loop);
return 0;
}
void main(void)
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
TestMemLeakage_uv_loop();
}
出力:
Detected memory leaks!
Dumping objects ->
{96} normal block at 0x0095B718, 32 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.
ない大きな漏れが、それはです! テストしてください。バグレポートを作成する必要がありますか?
更新。このリークはループの数に依存しません。 (私は慎重にテストしなかったし、深くは行っていない)。
void main(void)
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
for(int i=0; i<100; ++i)
TestMemLeakage_uv_loop();
}
UPD2:次のコードは、同じメモリリークが発生します。TestMemLeakage_uv_loop()
より前と後の2つのヒープスナップショットの比較を示します。 http://image.prntscr.com/image/a42cf8945eaa4cb58a94eaea1e7c099e.png 割り当てが行われ、割り当てが解除されていません。そのうちの1つがprintf
で作成されました。
これが通常の状況であるかどうかわかりません。
私は深くトレースするのに十分ではありませんでしたが、この32バイトのリークは時間の経過とともに増加するわけではなく、接続数、ループ数、ハンドル数などでは増加しません。そしてそれをさせてください。** :) – kyb