先记录一笔后续补上 :
大致是 c++ 继承QAbstractListModel 重写自定义model
该model 内放入 一张表信息, 为 QList<Record> list 存储一张表的所有信息
Record 为一张表的一条记录, 然后 model 中提供一个函数 Record * getRecord(int row)
获取某一行的一条记录,此处错误将 成员里的 list[row] 传递给了界面,导致该块内存的重复释放
Record 在 main.cpp 中 通过
qmlRegisterType<Record>("uri", 1, 0, "Record "); 注册进qml中提供给界面接收用。 然后界面关闭后主动将该块内存释放了,导致内存的重复释放,
解决办法: 在 Record * getRecord(int row) 中 new Record 一块内存 提供给界面用
Record *data = new Record;
(*data) = ist[row]
解决内存多次释放问题
本文探讨了在C++中使用Qt框架时,重写QAbstractListModel类并自定义模型可能导致的内存管理问题。具体分析了通过qmlRegisterType注册Record类型,并在界面关闭时释放内存引发的重复释放问题。提出了通过new操作符分配新内存并拷贝构造的方式避免内存重复释放的解决方案。
5万+

被折叠的 条评论
为什么被折叠?



