我的应用程序内存增加

Memory increasing in my app

本文关键字:增加 内存 应用程序 我的      更新时间:2023-10-16

我正在学习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()是多余的。