Question

in Qt Creator (qt 4.8, winxp) I wrote

QuaZip* zipfile = new QuaZip;
zipfile->setZipName("myzipfile.zip");
zipfile->open(QuaZip::mdUnzip);

if(zipfile->isOpen()){
  QStringList files = zipfile->getFileNameList();
}   // here the error occurs

when files is destroyed, a messagebox says

Debug Assertion Failed!

Expression: _CrtIsValidHeapPointer(pUserData)

In the debugger I have the following function stack:

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
...

line 433 in qlist.h is where the debugger stops:

while (from != to) --to, reinterpret_cast<T*>(to)->~T();

the error occurs only if I call ::getFileNameList(), if I fill the list manual it works fine. Other operations with quazip work, I can unzip and zip data, only the getFileNameList makes trouble.

EDIT: I found the cause: the quazip1.dll I used was the release version of it, only in debug-running this problem arised. So if I use the debug quazip.dll, it works fine. Annoying they're called the same, so I have to rename everytime I switch from debug to release. Anybody knows a workaround to this?

Was it helpful?

Solution

This means that you are mixing release mode Qt DLLs with Debug ones. You have to create 2 sets of Quazip DLLs one for Release mode and one for Debug mode. You cannot mix Qt Debug DLLs with Release DLLs.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top