我有这个内存泄漏: `==1==错误:LeakSanitizer:检测到内存泄漏
1 个对象中的 104 字节直接泄漏,分配自:
#0 0x56552328e39d in operator new(unsigned long) /root/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:95:3
#1 0x56552329a795 in CMailServer::inbox(char const*) const /app/example.cpp:625:30
#2 0x56552329ed6b in main /app/example.cpp:728:27
#3 0x7f2831865082 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24082) (BuildId: 1878e6b475720c7c51969e69ab2d276fae6d1dee)`
625行对应的是这个:
CMailIterator CMailServer::inbox (const char *email) const
{
for(size_t i=0; i<m_Len_Acept; i++)
{
if(m_Acept[i]->compareByTo(CMail("", email,"")))
{
CMail *tmp = m_Acept[i];
CMail *newMail = new CMail(tmp->getFrom(), tmp->getTo(), tmp->getBody());
CMail *headPointer = newMail;
CMail *tailPointer = newMail;
tmp = tmp->getNext();
while(tmp)
{
newMail = new CMail(tmp->getFrom(), tmp->getTo(), tmp->getBody()); // 625
tailPointer->setNext(*newMail);
tailPointer = newMail;
tmp = tmp->getNext();
}
return CMailIterator(headPointer);
}
}
return CMailIterator(nullptr);
}
所以我想创建一个新元素,
95号线
CMail& CMail::operator = (CMail &&src) noexcept
{
if(this == &src)
return *this; // line 95
m_From = src.m_From;
m_This = src.m_This;
m_Body = src.m_Body;
m_Next = src.m_Next; // possible error ?
return *this;
}
主要
CMailIterator i1 = s0 . inbox ( "john" );
我想知道为什么它被称为运动构造函数?或者,如何解决它,以免发生内存泄漏。链接到整个程序:https://godbolt.org/z/5cv8TYr8x
更好的设置程序