c – 我的应用程序内存增加
发布时间:2020-12-16 07:10:03 所属栏目:百科 来源:网络整理
导读:我正在学习c,我需要一些关于如何在不使用指针时清理内存的建议. 我有一个黑莓10应用程序的背景,它在停止之前有3MB的内存限制,我的应用程序因为达到这个限制而被停止,我很难找到找出原因. 我已经将内存的增加范围缩小到一个函数 – 如果我不调用此函数,则内存
我正在学习c,我需要一些关于如何在不使用指针时清理内存的建议.
我有一个黑莓10应用程序的背景,它在停止之前有3MB的内存限制,我的应用程序因为达到这个限制而被停止,我很难找到找出原因. 我已经将内存的增加范围缩小到一个函数 – 如果我不调用此函数,则内存不会增加. 该函数使用QVariant,QVariantList,QVariantMap,QString,它们在创建类时在函数外部声明(即QVariantMap映射),然后我在函数中访问这些对象,我在每个函数上调用.clear(),我就是理解应该清理持有的内存,我也在函数中使用int,它也在它之外声明. 该函数非常大,并且正在调用其他函数,所以我在下面提供了一个代码片段,以防万一其他人显然是错误的. bindings.clear(); bindings["name"] = name; result.clear(); result = sqlda->execute(sqlQueryz,bindings); if (!sqlda->hasError()) { if( !result.isNull() ) { list.clear(); list = result.value<QVariantList>(); recordsRead = list.size(); for(int iii = 0; iii < recordsRead; iii++) { map.clear(); map = list.at(iii).value<QVariantMap>(); 任何帮助赞赏. 解决方法
在QList或QMap上调用.clear()清除列表但不释放列表中的对象,例如,如果你有:
QList<QObject *> list; QObject *c = new QObject(); c->setObjectName("object_a"); list.append(c); QObject *b = new QObject(); b->setObjectName("object_b"); list.append(b); qDebug() << list.count(); //here you get 2 list.clear(); qDebug() << list.count(); //here you get 0; qDebug() << a->objectName(); // Here you get "object_a" 这意味着在.clear()之后,你的对象仍然存在于记忆中 当你想真正摆脱列表中的所有对象时你应该做的是: while (list.count() > 0) delete list.takeFirst(); 这里list.clear()是多余的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |