Утечка памяти при создании исключения с указателем на переменную-член - PullRequest
0 голосов
/ 03 мая 2020

У меня следующая проблема:

Каждый раз, когда я выкидываю следующее исключение, я получаю предупреждение об утечке памяти Valgrind:

Мне удалось надежно отследить его до throw MyException{pointer} заявлений, которые я имею в своей программе. - Если я закомментирую их, предупреждение исчезнет. У меня есть несколько других классов исключений, которые работают безупречно. Единственное различие между ними заключается в существовании переменной-указателя.

РЕДАКТИРОВАТЬ: я пробовал то же исключение с std :: string в качестве аргумента: ошибка Valgrind по-прежнему сохраняется.

Valgrind ошибка:

144 bytes in 1 blocks are possibly lost in loss record 7 of 15

(Информация о файле указывает на уже упомянутые операторы throw MyException{pointer}.

Мое исключение:

// Forward declaration
class PointerClass;  

class MyException : public std::exception
{
public:
  MyException() = delete;

  MyException(PointerClass* pointer) : pointer_{pointer}
  {};

  MyException(const MyException& other) = default;

  MyException& operator=(MyException& other) = default;

  ~MyException() = default;  

  const char* what() const noexcept
  {
    return "my exception.";
  }

  const PointerClass* getPointer() const noexcept
  {
    return pointer_;
  }

private:
    PointerClass* pointer_ = nullptr;
  };

Кто-нибудь знает, почему это так? происходит и как это исправить?

1 Ответ

0 голосов
/ 04 мая 2020

Мне удалось решить проблему: мой улов был:

catch(Except::CustomException& exception)
{
  std::cout << "Exception occurred" << std::endl;
  exit(0);
}

, который вызывал все проблемы. Теперь я использую

catch(Except::CustomException& exception)
{
  std::cout << "Exception occurred" << std::endl;
  flag = true;
}

if(flag)
{
   exit(0);
}

, который не вызывает утечек.

...