Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> valgrindを使ってLinuxシステムのメモリをチェックする方法

valgrindを使ってLinuxシステムのメモリをチェックする方法

  

Linuxシステムを使ってコードを書く過程で、メモリリークの問題があるかもしれません。それで、ユーザはメモリをチェックすることを学ぶべきです、それでLinuxはどのようにメモリをチェックしますか?一般的にいくつかのツールを使用して、この記事はLinuxシステムでメモリをチェックするためにvalgrindを使う方法を紹介します。

の#include "STDLIB.H"

の#include "stdio.hの"

の#include「文字列:

のコードを見てみましょう.h》

静的void mem_leak1(void)

{

char * p = malloc(1);

}

静的void mem_leak2(void)

{

ファイル* fp = fopen(< test.txt'、' w');

}

static void mem_overrun1(void)

{

char * p = malloc(1);

*(short *)p = 2;

Free(p);

}

static void mem_overrun2(void)

{

char配列[5];

strcpy (array、' hello');

}

static void mem_double_free(void)

{
char * p = malloc(1);

free(p);

free(p);

}

static void mem_use_wild_pointer(void)

{

char * p =(void *)0x80184800;

* p = 1;

}

static void mem_free_wild_pointer(void)

{

char * p;

free(p);

}

int main()

{

mem_leak1();

mem_leak2();

mem_overrun1();

mem_overrun2();

mem_double_free();

//mem_use_wild_pointer();

mem_free_wild_pointer();

return 0;

}

一般的なメモリの問題:

1.動的メモリリーク;

2.リソースリーク、ここでは例としてファイルディスクリプタがあります;

3.動的メモリ範囲外;

4.配列メモリ範囲外;

5.動的メモリダブルフリー、

6.ワイルドポインタ、つまり未初期化ポインタを使用します;

7.ワイルドポインタ、つまり未初期化ポインタを解放します。

サンプルコードが単純すぎる場合、6番目のケースになります。ワイルドポインタは直接クラッシュにつながるので、メインでは、呼び出しは実際のサンプルコードではありません。 valgrindは実行されたコードしか検出できないため、6番目のエラー条件は後のレポートでは報告されません。ただし、大規模プロジェクトでは、プログラムをクラッシュさせずにワイルドポインタを使用することが可能です。また、上記の7つのケースのうち、厳密に言えば1つのカテゴリに分類できるケースもあります。前のページ12次のページ合計2ページ

Copyright © Windowsの知識 All Rights Reserved