VS Compiler: QTableView::spans korrupt nach removeRow()
Verfasst: 9. Mai 2010 18:33
Hallo,
meine Anwendung stürzt reproduzierbar ab ohne das ich den Grund dafür kenne.
Der Ablauf im Groben:
- DataTable erbt von QTableWidget
- ein paar Zeilen werden hinzugefügt
- sämtliche Zeilen werden per removeRow() wieder entfernt
- eine Zeile wird hinzugefügt
- Schutzverletzung inQMapData::Node *QMap<Key, T>::mutableFindNode()
(genauer: das Attribut d enthält den unsinnigen Wert 0xfdfdfdfd
Ein paar Aufrufe höher habe ich herausgefunden, das in QTableView::paintEvent() die Liste d->spans korrupt ist (Debugger zeigt -2 Einträge). Siehe auch hierzu den Screenshot.
Daraufhin wird in QTableView Zeile 1330 "if (d->hasSpans())" aktiv und ruft d->drawAndClipSpans() auf. Das endet dann in der Schutzverletzung weiter unten.
Das Seltsame daran ist: Ich benutze überhaupt keine Spans. Auch ein clearSpans(); in DataTable::paintEvent() direkt vor QTableView::paintEvent() kann den Absturz nicht aufhalten.
Die Umgebung:
OS: Windows XP 32-bit
Compiler: Visual Studio 2008 (mit Qt-Plugin)
Debuger: CDB
Runtime: Multithreaded Debug DLL
SubSystem: Console
Qt: 4.6.2 Open Source
Weis jemand Rat?
meine Anwendung stürzt reproduzierbar ab ohne das ich den Grund dafür kenne.
Der Ablauf im Groben:
- DataTable erbt von QTableWidget
- ein paar Zeilen werden hinzugefügt
- sämtliche Zeilen werden per removeRow() wieder entfernt
- eine Zeile wird hinzugefügt
- Schutzverletzung inQMapData::Node *QMap<Key, T>::mutableFindNode()
(genauer: das Attribut d enthält den unsinnigen Wert 0xfdfdfdfd
Ein paar Aufrufe höher habe ich herausgefunden, das in QTableView::paintEvent() die Liste d->spans korrupt ist (Debugger zeigt -2 Einträge). Siehe auch hierzu den Screenshot.
Daraufhin wird in QTableView Zeile 1330 "if (d->hasSpans())" aktiv und ruft d->drawAndClipSpans() auf. Das endet dann in der Schutzverletzung weiter unten.
Das Seltsame daran ist: Ich benutze überhaupt keine Spans. Auch ein clearSpans(); in DataTable::paintEvent() direkt vor QTableView::paintEvent() kann den Absturz nicht aufhalten.
Die Umgebung:
OS: Windows XP 32-bit
Compiler: Visual Studio 2008 (mit Qt-Plugin)
Debuger: CDB
Runtime: Multithreaded Debug DLL
SubSystem: Console
Qt: 4.6.2 Open Source
Weis jemand Rat?