Проблемы с памятью с QTextEdit - PullRequest
1 голос
/ 18 ноября 2011

Я пытаюсь использовать QTextEdit для вывода QstringList

* 1003 например *

void CTextBox::AddText(QStringList list, QStringList animList)
{
    //CGraphics* graphics = CGraphics::GetInst();

    //QStandardItem *baseItem = new StandardItem("Hello");
    //textBrowser = new QTextEdit();
    standardModel->clear();
    rootNode = standardModel->invisibleRootItem();
    treeView->setModel(standardModel);

    QString string;

    //std::string = list[i].

    QDataStream* data = new QDataStream;

    int j = 0;
    int k = 0;

    for (int i = 0; i < (list.size()); i++)
    {
        //string += list[i];
        //string += hierarchyList[i];
        // textBrowser->setText(string);
        string.append(list[i]);
        //textBrowser->append(list[i]);

        if (list[i].contains("Is Parent"))
        {
            standardItems[j] = new QStandardItem(list[i-1]);
            /*for (int k = 0; k < j; k++)
            {
                if (standardItems[j]->contains(st))
                   {
                   }
            }*/
            rootNode->appendRow(standardItems[j]);       
            //k = j;     
            j++;
        }
        else if (list[i].contains("inherits from"))
        {
            standardItems[j] = new QStandardItem(list[i-1]);
            for(k = 0; k < j; k++)
            {
                if (standardItems[k]->text() ==list[i+1])
                {
                    standardItems[k]->appendRow(standardItems[j]);
                    break;
                }
            }
            //standardItems[k]->appendRow(standardItems[j]);
            j++;            
        }
        //textBrowser->setText("Hello");
    }

    for (int i = 0; i < (animList.size()); i++)
    {
        string.append(animList[i]);
        //textBrowser->append(animList[i]);
    }

    textBrowser->setText(string);

    treeView->setModel(standardModel);
    //CGraphics* graphics = CGraphics::GetInst();
    //graphics->Render();
}

Но размер списка может быть абсолютно огромным, примерно до 1700 строк. Приблизительно после 400ish добавлений или около того я получаю это сообщение об ошибке.

Необработанное исключение в 0x65154715 в ipodGuiLoaderQT.exe: 0xC0000005: Место чтения нарушения доступа 0xfdfdfe11.

Обычно это указывает на переполнение памяти, но я не могу контролировать память textBrowser, или я нахожусь на совершенно неверном пути?

EDIT

Я внес небольшое изменение, теперь я добавляю элементы списка в строку Qstring с именем string и затем устанавливаю текст в конце цикла.

1018 * например *

textBrowser->setText(string);

У меня все та же проблема.

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Вы уверены, что элемент ith, который вы пытаетесь добавить к QTextEdit, является допустимым элементом списка.Будьте осторожны при использовании оператора []:

Возвращает элемент в позиции индекса i в качестве модифицируемой ссылки.у меня должна быть допустимая позиция индекса в списке (т. е. 0 <= i <size ()). </p>

Если i больше или равно list.count(), то это, вероятно, кореньвашего крушения.

Чтобы убедиться, что с QTextEdit нет проблем, вы можете попробовать следующее:

for (unsigned i=0; i<50000; i++)
    textBrowser->append("Dummy String Row");

Если приведенный выше код вызывает исключение (я считаю это невозможным), сообщите нам об этом.,В противном случае должна возникнуть проблема с самим списком или, скорее всего, с вашим кодом, который обрабатывает список.

РЕДАКТИРОВАТЬ: НЕКОТОРЫЕ ПРОБЛЕМЫ, КАСАЮЩИЕСЯ ВАШЕГО КОДА

standardItems[j] = new QStandardItem(list[i-1]);

, если i==0 list[-1] недопустимо и возможная причина сбоя

if (standardItems[k]->text() ==list[i+1])

Аналогично, если i==list.count()-1, i+1 не является допустимым индексом, то есть еще одна причина исключения

LOOPING THOUGH A QStringList

Для того, чтобыполучить все элементы QStringList с именем list и отобразить их на QTextEdit, вы можете сделать следующее:

for (unsigned i=0; i<list.count(); i++)
    textBrowser->append(list[i]);

Это будет хорошо работать.

0 голосов
/ 25 ноября 2011

Я открываю здесь ответ, чтобы не перегружать список комментариев :) Если вы уверены, что проблема не в содержимом list, то это может быть связано с массивом standardItems.Не могли бы вы рассказать, как это инициализируется?Может быть, вы пытаетесь получить к нему доступ за его пределами

...