2016-04-05 39 views
-1

メモリリークの取得。 valgrindは、ここにあるかもしれないと言います。どんな助けでも本当に感謝しています。どこか多分enter relevant sort周り.... where algorithm is one of bubble, sort2, or sort 3メモリリークの可能性があります。

void usageAbort(string progname, string message) 
{ 
    cerr << message << endl 
     << "Usage: " << progname << " algorithm" << endl 
     << "  where algorithm is one of " 
     << "bubble, sort2, or sort3" 
     << endl; 
    exit(1); 
} 

/***************************************************************************/ 
/**                  **/ 
/***************************************************************************/ 


string algorithmFromCommandLine(int argc, char *argv[]) 
{ 

    string program = argv[0]; 
    string algorithm = argv[1]; 
    if(argc!=2){ 
     usageAbort(program, "enter proper argument count"); 
    } 

    if((algorithm == "bubblesort") or (algorithm == "quicksort") or 
     (algorithm== "insertionsort")){ 
      return algorithm; 
    } 
    else{ 
     usageAbort(program,"enter relevant sort"); 
    } 
    return 0; 

} 
+1

コードのどこかに静的ポインタがありますか?私はあなたのコードのこの部分にmemleakは見ません。 –

+0

'usageAbort()'の 'const char *'へのパラメータの変更は機能しますか?そこに文字列を使う必要はありません。私は(あなたが 'メソッドでexit()を'を使用しているとして)(パラメータで)一時 'STRING'でメモリが正しく解放するチャンスを持っていないので、可能リークがあるとしvalgrid推測 –

+0

Valgrindのは、多くの場合、いくつかの「未解放」を示しますメモリ。それをテストする方法は簡単です - 基本ライブラリが含まれ、メインが空のプログラムを作成します。 > valgrindのとそれを実行すると、あなたはそれについて悪い感じ:) – tomascapek

答えて

1

exit()特定の関数の引数には、自動オブジェクトのデストラクタを呼び出すことはありません。したがって、prognamemessage(おそらくあなたのコードの他の変数)によって使用されるメモリは正しく削除されません。一般的にexit()を使用するのは良い考えではありません。How to end C++ codeを参照してください。

関連する問題