QT应用程序闪退,单击按钮,n(不固定)次后异常退出
开发环境:Qt Creator 4.7.1 MSVC 2015
闪退原因:QList<自定义类型> mList ,List 的 append 调用了默认的复制构造函数,但在自定义类中使用了malloc,默认的复制构造函数不能完全完成复制。
自定义类
class A
{
public:
A()
{
ptr = nullptr;
}
~A()
{
if(ptr != nullptr)
{
free(ptr);
}
}
/* 复制构造函数 */
A(const A& a)
{
size =a.size;
if(size == 0)
{
ptr =nullptr;
}
else
{
/* 重点在这里,重新申请内存 */
ptr =static_cast<uint8_t*>(malloc(size));
memcpy(xxxxxxxxxx);
}
}
void reSize(uint32_t _s)
{
size =_s;
if(ptr != nullptr)
{
free(ptr);
}
ptr =static_cast<uint8_t*>(malloc(_s));
}
private:
uint8_t* ptr;
uint32_t size;
};
使用类A定义List
QList<A> list;
A a;
a.reSize(16);
list.append(a);
/*
这样是可发正常工作的,但若类A使用默认构造函数会导致
list中的新变量和a.ptr 使用同一块内存,a析构后访问
list[x].ptr 会导致灾难(nCoV)
*/