Nach XML anlegen Heap Fehler
Verfasst: 26. März 2008 12:14
Hallo,
ich habe folgendes Problem das mich schon seit Tagen beschäftigt. Ich hoffe das ihr mir helfen könnt.
Problem: Ich stelle aus einigen Daten eine XML file zusammen und speichere diese ab. Nach dem speichern kommt eine Warnung das etwas mit Heap nich stimmt. Dabei wiederholt sich die Warnung entsprechend der angelegten Elemente in der XML File. Den Mustercode habe ich aus einem Qt Buch, diesen habe ich bereits erfolgreich in einem anderen Programm verwendet.
Mein System 2000 und XP mit VisualStudio 2005 Pro Edition
Qt: 4.2.2
Also meine Funktion:
Sobald ich ein QDomDocument anlege kommen die Probleme und folgende Ausgabe wobei das output nicht wirklich hilft:
***************************************************
Windows has triggered a breakpoint in Student_Busch.exe.
This may be due to a corruption of the heap, and indicates a bug in Student_Busch.exe or any of the DLLs it has loaded.
The output window may have more diagnostic information
***************************************************
Was mache ich falsch? Ähnliches hat ja schon mal funktioniert.
ich habe folgendes Problem das mich schon seit Tagen beschäftigt. Ich hoffe das ihr mir helfen könnt.
Problem: Ich stelle aus einigen Daten eine XML file zusammen und speichere diese ab. Nach dem speichern kommt eine Warnung das etwas mit Heap nich stimmt. Dabei wiederholt sich die Warnung entsprechend der angelegten Elemente in der XML File. Den Mustercode habe ich aus einem Qt Buch, diesen habe ich bereits erfolgreich in einem anderen Programm verwendet.
Mein System 2000 und XP mit VisualStudio 2005 Pro Edition
Qt: 4.2.2
Also meine Funktion:
Code: Alles auswählen
void WriteToXML()
{
QString XMLFileToSave = "Values.xml";
//QFile file(XMLFileToSave);
QFile XMLFile(XMLFileToSave);
if(!XMLFile.open(QIODevice::WriteOnly))
{
QMessageBox::warning(this, "Warnmeldung", "XML-Datei: " + XMLFileToSave + " konnte zum Schreiben nicht geöffnet werden!", "OK", 0);
}
else
{
const int Ident = 4; //Groesse des Einzugs (Platz zwischen Knoten) von der Xml
QDomDocument mydoc;
//Das ist das root von dem XML Baum, wird für den Anfang benötigt
//*********************************************
/*ab der nächsten Zeile beginnen die Probleme */
QDomElement root = mydoc.createElement("trainingswerte");
mydoc.appendChild(root);
/* Strings fuer die Knoten mit den Trainingswerten */
QString IOQuantilString = "IOQuantil";
QString IOContrastString = "IOContrast";
QString NIOQuantilString = "NIOQuantil";
QString NIOContrastString = "NIOContrast";
//Elemente für die einzelnen Werte
QDomElement vectIOQuantilElement = mydoc.createElement(IOQuantilString);
QDomElement vectIOContrastElement = mydoc.createElement(IOContrastString);
QDomElement vectNIOQuantilElement = mydoc.createElement(NIOQuantilString);
QDomElement vectNIOContrastElement = mydoc.createElement(NIOContrastString);
//Elemente als Knoten in XML einbinden
root.appendChild(vectIOQuantilElement);
root.appendChild(vectIOContrastElement);
root.appendChild(vectNIOQuantilElement);
root.appendChild(vectNIOContrastElement);
//Kontrolle damit die Vektoren auch immer etwas enthalten (Sollte sinnvoll sein)
if (vectIOQuantil.isEmpty())
{
vectIOQuantil.resize(0); //Der Verctor wird == 0 gesetzt damit wir einen Wert haben
}
if (vectIOContrast.isEmpty())
{
vectIOContrast.resize(0); //Der Verctor wird == 0 gesetzt damit wir einen Wert haben
}
if (vectNIOQuantil.isEmpty())
{
vectNIOQuantil.resize(0); //Der Verctor wird == 0 gesetzt damit wir einen Wert haben
}
if (vectNIOContrast.isEmpty())
{
vectNIOContrast.resize(0); //Der Verctor wird == 0 gesetzt damit wir einen Wert haben
}
//Hier werden die einzelnen Werte eingesetzt
//Immer in eigener Schleife weil die Groeße der Verctoren variiren kann (unterschiedliche Lauflaenge)
for (int i = 0; i < vectIOQuantil.size(); i++)
{
vectIOQuantilElement.setAttribute("NR_" + QString::number(i),vectIOQuantil.value(i));
vectIOQuantilElement.setAttribute("Anzahl",i);
}
for (int i = 0; i < vectIOContrast.size(); i++)
{
vectIOContrastElement.setAttribute("NR_" + QString::number(i),vectIOContrast.value(i));
}
for (int i = 0; i < vectNIOQuantil.size(); i++)
{
vectNIOQuantilElement.setAttribute("NR_" + QString::number(i),vectNIOQuantil.value(i));
}
for (int i = 0; i < vectNIOContrast.size(); i++)
{
vectNIOContrastElement.setAttribute("NR_" + QString::number(i),vectNIOContrast.value(i));
}
//Speichert den XML Baum
//QTextStream out(&file);
QTextStream out (&XMLFile);
mydoc.save(out, Ident);
QMessageBox::information(this,"XML speichern","Die XML wurde gespeichert","OK",0);
}
/*file.close();*/
XMLFile.close();
}
Sobald ich ein QDomDocument anlege kommen die Probleme und folgende Ausgabe wobei das output nicht wirklich hilft:
***************************************************
Windows has triggered a breakpoint in Student_Busch.exe.
This may be due to a corruption of the heap, and indicates a bug in Student_Busch.exe or any of the DLLs it has loaded.
The output window may have more diagnostic information
***************************************************
Was mache ich falsch? Ähnliches hat ja schon mal funktioniert.