Qt Creator(qt 4.8、winxp)で書いた
QuaZip* zipfile = new QuaZip;
zipfile->setZipName("myzipfile.zip");
zipfile->open(QuaZip::mdUnzip);
if(zipfile->isOpen()){
QStringList files = zipfile->getFileNameList();
} // here the error occurs
ファイルが破棄されると、メッセージボックスに次のように表示されます
デバッグ アサーションに失敗しました!
式: _CrtIsValidHeapPointer(pUserData)
デバッガーには、次の関数スタックがあります。
0 DbgBreakPoint ntdll 0x7c90120e
1 RtlpBreakPointHeap ntdll 0x7c96c201
2 RtlpValidateHeapEntry ntdll 0x7c96c63e
3 RtlValidateHeap ntdll 0x7c9603b0
4 HeapValidate kernel32 0x7c85f8d7
5 _CrtIsValidHeapPointer dbgheap.c 2103 0x102d1ac9
6 _free_dbg_nolock dbgheap.c 1317 0x102d0b3a
7 _free_dbg dbgheap.c 1258 0x102d09e0
8 free dbgfree.c 49 0x102d8990
9 qFree qmalloc.cpp 60 0x5e2f1d
10 QString::free qstring.cpp 1235 0x65dd22
11 QString::~QString qstring.h 880 0x5ac0d3
12 QString::`scalar deleting destructor' QuizSet 0x4120e0
13 QList<QString>::node_destruct qlist.h 433 0x412180
14 QList<QString>::free qlist.h 759 0x4115fb
15 QList<QString>::~QList<QString> qlist.h 733 0x410967
16 QStringList::~QStringList MyApp 0x414d9f
17 MyApp::myFunction myapp.cpp 561 0x420e1c
...
qlist.h の 433 行目で、デバッガーが停止します。
while (from != to) --to, reinterpret_cast<T*>(to)->~T();
エラーは、::getFileNameList() を呼び出した場合にのみ発生します。リスト マニュアルを入力すると、正常に動作します。quazip を使用した他の操作は機能します。データを解凍および圧縮できますが、getFileNameList だけが問題を引き起こします。
編集:私は原因を見つけました:私が使用した quazip1.dll は、この問題が発生したデバッグ実行でのみ、それのリリース バージョンでした。したがって、デバッグ quazip.dll を使用すると、正常に動作します。迷惑なことに同じ名前なので、デバッグからリリースに切り替えるたびに名前を変更する必要があります。誰でもこれに対する回避策を知っていますか?