2016-04-05 2 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 *'? Я не вижу необходимости использовать строку там. Я думаю, valgrid предположил, что возможна утечка, потому что память в temp 'string' (в параметре) не имеет шансов быть правильно освобождена (поскольку вы используете' exit() 'в методе) –

+0

Valgrind часто показывает некоторые" Память. Способ протестировать легко - создать программу с базовыми библиотеками, включенными и с пустой основной. Скомпилируйте его -> запустите его с valgrind, и вы можете видеть, сколько свободной памяти вы можете иметь, не чувствуя себя плохо об этом :) – tomascapek

ответ

1

exit() не вызывает деструкторы автоматических объектов, в частности, аргументы функции. Таким образом, память, используемая progname и message (и, вероятно, другими переменными в вашем коде) не удаляется должным образом. В общем случае с использованием exit() это не очень хорошая идея, см. How to end C++ code.