2016-05-26 26 views
0

私はクライアント/サーバーアプリケーションを持っています。相互作用はBoost.Asioによって実装されました。ブーストasioのメモリリーク

データの長時間送信をチェックするためのユニットテストを作成しました。 テスト中にメモリリークが検出されました。 タスクマネージャーは、メモリ使用量が絶えず増加していることを示しています(10分あたり最大35MB)。テストの終了時に生成されるレポートには、これを含んでいます

Result StandardError: Detected memory leaks! 
Dumping objects -> 
{14522} normal block at 0x00E8ADC0, 16 bytes long. 
Data: < _M} Y   > B0 5F 4D 7D F9 59 F2 02 F4 E9 E6 00 CC CC CC CC 
{14012} normal block at 0x00E8B280, 16 bytes long. 
Data: < v    > C0 76 A4 00 94 01 00 00 98 01 00 00 F0 D2 E3 00 
{14011} normal block at 0x00E74B38, 12 bytes long. 
Data: <   > 00 00 00 00 9C 01 00 00 98 01 00 00 
{14007} normal block at 0x00E745F8, 8 bytes long. 
Data: < L  > E0 4C E5 00 00 00 00 00 
{14006} normal block at 0x00E54CB8, 60 bytes long. 
Data: < v   4 > E4 76 A4 00 D0 D3 B0 00 00 00 00 00 34 80 E3 00 
{13724} normal block at 0x00E710F8, 385 bytes long. 
Data: <    > 03 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
{13722} normal block at 0x00E85C58, 28 bytes long. 
Data: < F _ _  > F2 B6 46 00 B4 5F E3 00 A0 5F E3 00 BC 96 E7 00 
{13720} normal block at 0x00E6F9B8, 80 bytes long. 
Data: <wxF    > 77 78 46 00 FC FF FF FF 00 00 00 00 CC CC CC CC 
{13700} normal block at 0x00E6DFD0, 88 bytes long. 
Data: <    > C8 A4 A4 00 01 00 00 00 01 00 00 00 00 00 00 00 
… 
Data: <` X L > 60 8E E0 00 58 17 E2 00 CD 4C F7 EA 
{153} normal block at 0x00DF0070, 12 bytes long. 
Data: <`  kf > 60 8D E0 00 98 00 E2 00 15 6B 66 0E 
{151} normal block at 0x00DF0038, 12 bytes long. 
Data: <   .g> 20 86 E0 00 E0 FC E1 00 9D B7 2E 67 
{149} normal block at 0x00DF0658, 12 bytes long. 
Data: <  G > A0 89 E0 00 00 00 00 00 47 01 D5 11 
{147} normal block at 0x00DF0268, 12 bytes long. 
Data: <`   > 60 84 E0 00 A8 F5 E1 00 ED 8C AA BA 
{145} normal block at 0x00DF0230, 12 bytes long. 
Data: <  ' " > 20 84 E0 00 00 11 E2 00 27 B0 22 00 
{143} normal block at 0x00DF0690, 12 bytes long. 
Data: <` P KnOQ> 60 88 E0 00 50 04 E2 00 4B 6E 4F 51 
{141} normal block at 0x00DF0540, 12 bytes long. 
Data: <`  > 7> 60 82 E0 00 00 0A E2 00 3E 0D 9E 37 
{139} normal block at 0x00DF0620, 12 bytes long. 
Data: <Pq  1 > 50 71 DF 00 00 00 00 00 E5 DD 31 B5 
{137} normal block at 0x00DF0700, 12 bytes long. 
Data: < q @  #> 10 71 DF 00 40 FA E1 00 14 8B 0D 23 
{134} normal block at 0x00DF5CE0, 96 bytes long. 
Data: <h BV BV  > 68 19 E0 00 D0 42 56 00 E0 42 56 00 88 00 00 00 
{133} normal block at 0x00DF0188, 8 bytes long. 
Data: < \  > A0 5C DF 00 00 00 00 00 
{132} normal block at 0x00DF5CA0, 16 bytes long. 
Data: <    > 88 01 DF 00 D8 AA DF 00 20 AC DF 00 20 AC DF 00 
Object dump complete. 

は私がデバッグモード_crtBreakAlloc = 1000でブーストの--detect_memory_leaks="allocation number"と設定ウォッチウィンドウ内を経由して言及したメモリの割り当てにブレークポイントを入れてみました。それは動作しません。たぶん私のコードではなく、boost/OpenSSLコードでリークが発生するのでしょうか?

どこでリークが発生するのかわかりません。私に何ができる? Windows 8の

、Visual Studioの2015年、1.60を高める、のOpenSSL 1.0.2g

+2

もっと明確な答えが必要な場合は、実際のソースコードを投稿する必要があります。 – Xirema

答えて

0

パート1:メモリについてのVisual Studioからの報告書は、私がTLSを介してサーバーとの通信にBoost.Asioを使用してい

をリーク、すなわちBoost.Asioは、OpenSSLを使用しています。

OpenSSLが初期化され、アプリが終了する前にメモリが消去されないようです(アプリが終了してメモリが解放されるため)。 これは大きなメモリチャンクではありません(私はそれを測定する方法がわかりません)。

結果として、Visual Studioはメモリをリークとして扱いました。そうではありません。

(これはおそらく、このようなレポートのための本当の理由は他になめらかで、私の仮定である。しかし、私は、他の考えられる理由は表示されません。)

パート2:

私は尋ね上記の質問では、数十Mbのメモリリークについてこれが私の悪いコードであり、巨大なメモリバッファになります))。

メモリリークについてのVisualStudioから巨大なメモリ消費とレポートが)私はなめらかで非常に間違っていると信じて作られた)

簡単にはるかに小さいサイズに縮小バッファ。

0

は窓の下でメモリリークに対処するためのいくつかの提案のヒントを参照するにはthis postを見てください。スクロールダウンして、最初の答えを見るだけではありません。特に、第2の答えによって議論されるDEBUG_NEWマクロベースの解決策を検討する価値があるかもしれません。 boost asioが主にヘッダーのみであることを考えれば、違反割り当てがboostライブラリから来ても、これはあなたを助けるはずです。

関連する問題