0

在我的 Qt C++ 应用程序中,我有一个 QList 我想将每个索引的内容增加相同的数量!

void MainWindow::on_pushButton_clicked()
    {

        list1<<"a"<<"b"<<"c"<<"d"<<"e";
        list2<<"f"<<"g"<<"h"<<"i"<<"j";

        List1<<list1;
        List2<<list2;



            for(int k=0;k<2;k++){
            for(int i=0;i<List1.size();i++){
                for(int j=0;j<List1[0].size();j++){
                List1[i]<<List1[i][j];
                }
            }

    }
    }

从上面的代码中,我想让 List 的第 0 个索引(即 List[0])的内容成为“a”“b”“c”“d”“e”“a”“b”“c”“的 QStringList d" "e" 和 List 的第一个索引 (即 List[1]) 的内容是 "f" "g" "h" "i" "j" "f" "g" "h" "i" 的 QStringList “j”!但是当我单击按钮时,我得到运行时错误说明

terminate called after throwing an instance of 'std::bad_alloc'

我该如何纠正?

4

1 回答 1

1

如果您的代码有问题,请尝试将其作为一个完整的示例运行,如下所示:

void test()
{
    QList<QStringList> ListOfLists;

    ListOfLists.append(QStringList());
    ListOfLists.append(QStringList());

    ListOfLists[0] << "a" << "b";
    ListOfLists[1] << "g" << "f";

    qDebug() << ListOfLists; // (("a", "b"), ("g", "f"))

    for (int i=0; i<ListOfLists.size(); ++i)
    {
        QStringList tempList = ListOfLists[i];

        foreach(QString s, tempList)
        {
            ListOfLists[i] << s;
        }
    }

    qDebug() << ListOfLists; // (("a", "b", "a", "b"), ("g", "f", "g", "f"))
}

通常,一旦您以干净的方式重写代码,问题就会消失。您的代码有两个列表,List1 和 List2 以及一些数组,没有人可以跟踪哪里出了问题。我怀疑,您的代码会在列表中递归,直到内存耗尽。这就是为什么我制作一个名为 tempList 的副本以避免无限递归。

于 2017-12-12T16:58:59.363 回答