PDA

View Full Version : Index out of range problem for a xml file



Niamita
3rd November 2011, 05:37
Hi all

I have following code


QStringList objectName_list;
objectName_list<<"label_master_ac"<<"label_living_ac"<<"label_dining_ac"<<"label_bathroom_geyser"<<"label_entertainment"
<<"label_heater";

QFile *file = new QFile("E:/label_with_xml_file/labelname.xml");
if (!file->open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Error: Cannot read file"),tr(qPrintable(file->errorString())));
}
QDomDocument doc;
doc.setContent(file);
QDomElement root = doc.documentElement();
QDomNode node = root.firstChild();
i=0;
while(!node.isNull())
{
if(node.toElement().tagName() == "label"){
if(node.toElement().attribute("objectName") != "label_master_ac" &&
node.toElement().attribute("objectName") != "label_living_ac" &&
node.toElement().attribute("objectName") != "label_dining_ac" &&
node.toElement().attribute("objectName") != "label_bathroom_geyser"
&& node.toElement().attribute("objectName") != "label_entertainment"
&& node.toElement().attribute("objectName") != "label_heater"){

qDebug()<<"while"<<node.toElement().attribute("objectName");
node = node.nextSibling();
continue;
}
qDebug()<<QString::number(i);
QLabel *label = new QLabel(this);
QFont font("Verdana", 10);
font.setBold(true);
label->setFont(font);
label->setAlignment(Qt::AlignCenter);
label->setFixedHeight(screenHeight/35);
label->setStyleSheet("QLabel { background-color: rgb(240, 240, 240,255); color: rgb(131, 64, 0, 255);}");
label->setObjectName(objectName_list.at(i));
qDebug()<< node.toElement().attribute("objectName");
if(objectName_list.at(i) == "label_master_ac" && node.toElement().attribute("objectName") == "label_master_ac"){
label->setText(node.toElement().text());
grid->addWidget(label, 0,1);
}
if(objectName_list.at(i) == "label_living_ac" && node.toElement().attribute("objectName") == "label_living_ac"){
label->setText(node.toElement().text());
grid->addWidget(label, 0,2);
}
if(objectName_list.at(i) == "label_dining_ac" && node.toElement().attribute("objectName") == "label_dining_ac"){
label->setText(node.toElement().text());
grid->addWidget(label, 0,3);
}
if(objectName_list.at(i) == "label_bathroom_geyser" && node.toElement().attribute("objectName") == "label_bathroom_geyser"){
label->setText(node.toElement().text());
grid->addWidget(label, 4, 1);
}
if(objectName_list.at(i) == "label_entertainment" && node.toElement().attribute("objectName") == "label_entertainment"){
label->setText(node.toElement().text());
grid->addWidget(label, 4, 2);
}
if(objectName_list.at(i) == "label_heater" && node.toElement().attribute("objectName") == "label_heater"){
label->setText(node.toElement().text());
grid->addWidget(label, 4, 3);
}
}
node = node.nextSibling();
i++;
file->seek(0);
}

On running it gives following error msg

ASSERT failure in QList<T>::at: "index out of range", file c:\QtSDK1\Desktop\Qt\4.7.3\mingw\include/QtCore/qlist.h, line 456
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.

I know that i am accessing a value which is out of range, but i do not not understand why?
Can anybody suggest me?
Thanks

Lesiok
3rd November 2011, 07:11
Because in line 64 i is incremented, but never is checked if i < objectName_list.size() and node have more elements than objectName_list.