1
Qt Creator中(QT 4.8,WINXP)投下的錯誤,我寫了QStringList中:: getFileNameList通過破壞
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)
在調試我有以下功能堆棧:在qlist.h
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
...
線433,其中調試器停止:
while (from != to) --to, reinterpret_cast<T*>(to)->~T();
僅當我調用:: getFileNameList()時發生錯誤,如果我填充列表手冊,它工作正常。 其他使用quazip工作的操作,我可以解壓和壓縮數據,只有getFileNameList會造成麻煩。
編輯:我找到了原因:我使用的quazip1.dll是它的發佈版本,只有在調試運行時出現這個問題。所以,如果我使用調試quazip.dll,它工作正常。令人討厭的是它們被稱爲相同的,所以每次我從調試切換到發佈時都必須重新命名。任何人都知道這個解決方法?
不知道這可能會導致崩潰(甚至編譯),但這看起來不正確:「QuaZip zipfile;」裏面的if。你已經將zipfile進一步聲明爲QuaZip *,所以刪除第二個zipfile變量。 –
哦謝謝,但那只是一個「錯字」,我糾正了它。問題仍然存在。 – cad