Ich bekomme eine CRT Heap Korruption erkannt Nachricht beim Ausführen der folgenden einfachen C++ - Code. Der Fehler kommt von der ::free
-Methode, die von dem Destruktor QMap
aufgerufen wird.QMap Destruktor bekam CRT entdeckt Nachricht
void foo() {
QMap<QString, QVariant> map;
map["Sample1"] = 2;
map["Sample2"] = 3;
}
ich verwende Qt 5.5.1 (I gebaut Qt mit Visual Studio 2013 und konfiguriert es Windows XP Ziel durch die v120_xp Toolset verwenden).
Umwelt:
- Mein Build-Betriebssystem ist Windows 8 64 Bit.
- Ich änderte die Platform Tools Eigenschaft zu Visual Studio 2013 - Windows XP (v120_xp).
Wenn ich den Code der folgenden ändern, tritt der Fehler nicht auftritt:
void foo() {
QMap<QString, int> map; // Change the second type from QVariant to int
map["Sample1"] = 2;
map["Sample2"] = 3;
}
Stacktrace enthält folgende Zeilen:
msvcr120d.dll!_free_dbg_nolock(void * pUserData, int nBlockUse) Line 1376 C++
msvcr120d.dll!_free_dbg(void * pUserData, int nBlockUse) Line 1265 C++
msvcr120d.dll!free(void * pUserData) Line 49 C++
Qt5Cored.dll!qMapDeallocate(QMapNodeBase * node, int alignment) Line 318 C++
Qt5Cored.dll!QMapDataBase::freeTree(QMapNodeBase * root, int alignment) Line 349 C++
Qt5Cored.dll!QMapDataBase::freeTree(QMapNodeBase * root, int alignment) Line 349 C++
Armaghan.exe!QMapData<QString,QVariant>::destroy() Line 225 C++
Armaghan.exe!QMap<QString,QVariant>::~QMap<QString,QVariant>() Line 339 C++
Armaghan.exe!foo() Line 32 C++
Armaghan.exe!main(int argc, char * * argv) Line 37 C++
[External Code]
Jede Hilfe wird geschätzt.
Ich habe keinen Fehler mit Ihrem Code, unter Qt 5.6, VS2015. Bitte minimieren Sie Ihren Code, um einfach 'foo()' in 'main()' aufzurufen, und prüfen Sie, ob das Problem weiterhin besteht. –
@MartinZhai Diese Funktion wirft keinen Fehler, wenn ich es zu einem einfachen Qt-Projekt verschiebe !! Handelt es sich um kompilerspezifische Optionen !? Ich baue dieses Projekt von CMake. – Ocean
Es kann sein. Sie können die Optionen Ihrer beiden Projekte vergleichen und nach Unterschieden suchen. –