0

malloc のないシリーズを探しています。何千ものテストケースがあるとします。人々は ptr を解放するのを忘れるかもしれません。スクリプトの最適化を手伝ってください。

テスト中のサンプルファイル

Test(func_class,func1)
{
  int i,j;
  char* ptr = (char*) malloc(sizeof(char));
  free(ptr);
}

Test(func_class,func1)
{
  int i,j;
  char* ptr = (char*) malloc(sizeof(char));
  / Memory Leak / 
}

開発中のスクリプト:

export MY_ROOT=`pwd`
_COUNT=0
pwd
_COUNT_WORD=0
filename=test.c
cat $filename | while read line
do 
    echo "Reading Line = $LINE" 
    for word in $line
    do
    _COUNT_WORD=$(($_COUNT_WORD+1))
    echo $_COUNT_WORD $word    
    if [ "$word" == "malloc\(sizeof\(char\)\);" ]; then    
        _MALLOC_FLAG=1   #this part of the code is not reached
        echo "Malloc Flag Hi"
        echo $word[2]
    fi
    done
    _COUNT_WORD=0
done 

malloc regex のマッチングに問題があります。malloc を記述する個々のユーザーのパターンを見つける必要があるため、スクリプトに多くの変更が必要であることはわかっています。

4

1 に答える 1

0

確認する他の方法があります。

awk の使用:

awk '/malloc/ || /free/{count++;}END{printf "%d",count}' fileundertest

これにより、ファイル内の「malloc」および「free」単語が検索され、カウントが出力されます。count が偶数の場合、malloc ごとに空きがあると言えます。

grep の使用:

grep -c "malloc" fileundertest 

これは、ファイル内のmallocワードをカウントします

同様に、

grep -c "free" fileundertest

行番号を一覧表示するには

grep -n "malloc" fileundertest
于 2013-10-07T13:21:08.543 に答える