IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

# ValgrindのIndirectly Lostの意味や実際のサンプルをご紹介

## (１) ValgrindのIndirectly Lostの意味や実際のサンプルをご紹介

### (１-１) Valgrindの「Indirectly Lost」はどんな状況？

あるメモリへのポインタが１つ以上存在するが、そのポインタを指すポインタ（ポインタのポインタ）が残っておらず、間接的に失われている状況の場合に「Indirectly Lost」の判定になります。

このような状況をIndirectly Lost（間接的な消失）と表現しています。

（図１１１） ### (１-２) 例１：サンプルプログラム

（例１）
#include <iostream>
using namespace std;
int main(void){
//# gの三重ポインタを定義
//# int型のポインタのポインタの配列（１要素）のアドレスを割り当て
int ***val = new int**;
//# gのポインタの値に
//# int型のポインタの配列（１要素）を格納
*val = new int*;
//# gのポインタのポインタの値に
//# int型の配列（１要素）を格納
**val = new int;
//# gのポインタのポインタのポインタの値に99をセット
***val = 99;
delete val;
}

（図１２１） ### (１-３) 例１：Valgrindのメモリリーク確認結果

（出力サンプル）
==31777== HEAP SUMMARY:
==31777==     in use at exit: 12 bytes in 2 blocks
==31777==   total heap usage: 3 allocs, 1 frees, 20 bytes allocated
==31777==
==31777== 4 bytes in 1 blocks are indirectly lost in loss record 1 of 2
==31777==    at 0x4C2B788: operator new(unsigned long) (vg_replace_malloc.c:417)
==31777==    by 0x400715: main (memorytest4.cpp:7)
==31777==
==31777== 12 (8 direct, 4 indirect) bytes in 1 blocks are definitely lost in loss record 2 of 2
==31777==    at 0x4C2B788: operator new(unsigned long) (vg_replace_malloc.c:417)
==31777==    by 0x4006FD: main (memorytest4.cpp:6)
==31777==
==31777== LEAK SUMMARY:
==31777==    definitely lost: 8 bytes in 1 blocks
==31777==    indirectly lost: 4 bytes in 1 blocks
==31777==      possibly lost: 0 bytes in 0 blocks
==31777==    still reachable: 0 bytes in 0 blocks
==31777==         suppressed: 0 bytes in 0 blocks
==31777==
==31777== For lists of detected and suppressed errors, rerun with: -s
==31777== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

（図１３１） ### (１-４) 例２：サンプルプログラム

（サンプル）
#include <iostream>
using namespace std;
int main(void){

double **h = new double*;
h = new double;
h = new double;
h = new double;
h = new double;
h = new double;
}

（図１４１） ### (１-５) 例２：Valgrindのメモリリーク確認結果

（出力サンプル）

==512== HEAP SUMMARY:
==512==     in use at exit: 36 bytes in 4 blocks
==512==   total heap usage: 4 allocs, 0 frees, 36 bytes allocated
==512==
==512== 4 bytes in 1 blocks are indirectly lost in loss record 1 of 4
==512==    at 0x4C2B788: operator new(unsigned long) (vg_replace_malloc.c:417)
==512==    by 0x4006FD: main (memorytest_indirectly2.cpp:7)
==512==
==512== 4 bytes in 1 blocks are indirectly lost in loss record 2 of 4
==512==    at 0x4C2B788: operator new(unsigned long) (vg_replace_malloc.c:417)
==512==    by 0x400716: main (memorytest_indirectly2.cpp:8)
==512==
==512== 4 bytes in 1 blocks are indirectly lost in loss record 3 of 4
==512==    at 0x4C2B788: operator new(unsigned long) (vg_replace_malloc.c:417)
==512==    by 0x40072B: main (memorytest_indirectly2.cpp:9)
==512==
==512== 36 (24 direct, 12 indirect) bytes in 1 blocks are definitely lost in loss record 4 of 4
==512==    at 0x4C2C866: operator new[](unsigned long) (vg_replace_malloc.c:579)
==512==    by 0x4006EF: main (memorytest_indirectly2.cpp:6)
==512==
==512== LEAK SUMMARY:
==512==    definitely lost: 24 bytes in 1 blocks
==512==    indirectly lost: 12 bytes in 3 blocks
==512==      possibly lost: 0 bytes in 0 blocks
==512==    still reachable: 0 bytes in 0 blocks
==512==         suppressed: 0 bytes in 0 blocks
==512==
==512== For lists of detected and suppressed errors, rerun with: -s
==512== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

（図１５１）  Anaplanのトレーニングの受講方法について

＜目次＞ (１) Anaplanのトレーニングの受講方法について 　(１-１) 受講方法の概要 　(１-２) Anaplan Communityの登録手順 　(１-３) Anaplanの … リトルエンディアンとビッグエンディアンの違いや概要

＜目次＞ (１) リトルエンディアンとビッグエンディアンの違いや概要 　(１-１) 「リトルエンディアン」と「ビッグエンディアン」とは？ 　(１-２) どのようなシーンで利用される？ ( … Azure App ServiceにVisual Studioからデプロイを行う方法

＜目次＞ (１) Azure App ServiceにVisual Studioからデプロイを行う方法 　(１-０) STEP0：前提条件 　(１-１) STEP1：Visual Stu … クラウドネイティブとは？（コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ等）

＜目次＞ (１) クラウドネイティブとは？（コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ等） 　(１-１) コンテナ 　(１-２) サービスメッシュ 　(１-３) … システム開発における設計品質の分析の進め方（一例）について

＜目次＞ (１) システム開発における設計品質の分析の進め方（一例）について 　(１-１) まえがき 　(１-２) 前提事項 　(１-３) 進め方 　(１-４) 参考：分析の手法について …

Top