У меня есть класс с именем "Пакет" с этим уничтожением:
class Packet
{
...
RequestPtr req;
~Packet()
{
if (req && isRequest() && !needsResponse())
delete req;
deleteData();
}
};
RequestPtr выглядит так:
typedef Request* RequestPtr;
class Request
{
...
~Request() {}
}
Проблема в том, что delete req;
и, следовательно, ~Request() {}
выполнены, я получаю эту ошибку:
*** glibc detected *** double free or corruption (fasttop): 0x0000000002a8a640 ***
Сначала я подумал, что, возможно, req
были удалены где-то еще, и когда он хочет выполнить delete req;
, очевидно, что req
нет. Однако, как вы можете видеть, есть оператор if
, который проверяет, определен req
или нет. Поэтому, безусловно, когда он хочет удалить req
, объект определяется.
Что на самом деле означает эта ошибка?