Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QVariantList crashed when call destructor

QVariantList crashed when call destructor

Scheduled Pinned Locked Moved Solved General and Desktop
7 Posts 5 Posters 2.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • O Offline
    O Offline
    OcaJLSA
    wrote on last edited by
    #1

    I'm new to Qt
    I have a strange crash when a QVariantList is destroyed.
    I write a small code to reproduice it.
    I use another methode to decode the json array, but I want to understand why.
    Qt 5.5.1
    Visual Sudio 2017
    Windows 10 64bit

    const char cFile[] = { "{\"Ids\":[0,1,2]}" };
    
    void TestJson(void)
    {
    	QByteArray Doc = QByteArray::fromRawData(cFile, strlen(cFile));
    	QJsonDocument jDoc = QJsonDocument::fromJson(Doc);
    	QJsonValue jVal = jDoc.object().value("Ids");
    	if (!jVal.isArray())
    		return;
    	QJsonArray jArr = jVal.toArray();
    	QVariantList list = jArr.toVariantList();
    	return;	// crash !!!!!!!!!
    }	
    
    int main(int argc, char *argv[])
    {
    	TestJson();
    }
    

    Call stack

    ucrtbased.dll!free_dbg_nolock(void * const block=0x00a840d8, const int block_use=16) Ligne 908	C++
    ucrtbased.dll!_free_dbg(void * block=0x00a840d8, int block_use=-1) Ligne 1030	C++
    AcqV7.exe!operator delete(void * block=0x00a840d8) Ligne 17	C++
    AcqV7.exe!operator delete(void * block=0x00a840d8, unsigned int __formal=16) Ligne 15	C++
    AcqV7.exe!QVariant::`scalar deleting destructor'(unsigned int)	C++
    >	AcqV7.exe!QList<QVariant>::node_destruct(QList<QVariant>::Node * from=0x00a87798, QList<QVariant>::Node * to=0x00a877a0) Ligne 463	C++
    AcqV7.exe!QList<QVariant>::dealloc(QListData::Data * data=0x00a87788) Ligne 836	C++
    AcqV7.exe!QList<QVariant>::~QList<QVariant>() Ligne 797	C++
    AcqV7.exe!TestJson() Ligne 67	C++
    AcqV7.exe!main(int argc=1, char * * argv=0x00a880e8) Ligne 76	C++
    
    kshegunovK J.HilkJ 3 Replies Last reply
    0
    • O OcaJLSA

      I'm new to Qt
      I have a strange crash when a QVariantList is destroyed.
      I write a small code to reproduice it.
      I use another methode to decode the json array, but I want to understand why.
      Qt 5.5.1
      Visual Sudio 2017
      Windows 10 64bit

      const char cFile[] = { "{\"Ids\":[0,1,2]}" };
      
      void TestJson(void)
      {
      	QByteArray Doc = QByteArray::fromRawData(cFile, strlen(cFile));
      	QJsonDocument jDoc = QJsonDocument::fromJson(Doc);
      	QJsonValue jVal = jDoc.object().value("Ids");
      	if (!jVal.isArray())
      		return;
      	QJsonArray jArr = jVal.toArray();
      	QVariantList list = jArr.toVariantList();
      	return;	// crash !!!!!!!!!
      }	
      
      int main(int argc, char *argv[])
      {
      	TestJson();
      }
      

      Call stack

      ucrtbased.dll!free_dbg_nolock(void * const block=0x00a840d8, const int block_use=16) Ligne 908	C++
      ucrtbased.dll!_free_dbg(void * block=0x00a840d8, int block_use=-1) Ligne 1030	C++
      AcqV7.exe!operator delete(void * block=0x00a840d8) Ligne 17	C++
      AcqV7.exe!operator delete(void * block=0x00a840d8, unsigned int __formal=16) Ligne 15	C++
      AcqV7.exe!QVariant::`scalar deleting destructor'(unsigned int)	C++
      >	AcqV7.exe!QList<QVariant>::node_destruct(QList<QVariant>::Node * from=0x00a87798, QList<QVariant>::Node * to=0x00a877a0) Ligne 463	C++
      AcqV7.exe!QList<QVariant>::dealloc(QListData::Data * data=0x00a87788) Ligne 836	C++
      AcqV7.exe!QList<QVariant>::~QList<QVariant>() Ligne 797	C++
      AcqV7.exe!TestJson() Ligne 67	C++
      AcqV7.exe!main(int argc=1, char * * argv=0x00a880e8) Ligne 76	C++
      
      kshegunovK Offline
      kshegunovK Offline
      kshegunov
      Moderators
      wrote on last edited by
      #2

      Could you try with:

      QByteArray Doc(cFile);
      

      Read and abide by the Qt Code of Conduct

      1 Reply Last reply
      0
      • O OcaJLSA

        I'm new to Qt
        I have a strange crash when a QVariantList is destroyed.
        I write a small code to reproduice it.
        I use another methode to decode the json array, but I want to understand why.
        Qt 5.5.1
        Visual Sudio 2017
        Windows 10 64bit

        const char cFile[] = { "{\"Ids\":[0,1,2]}" };
        
        void TestJson(void)
        {
        	QByteArray Doc = QByteArray::fromRawData(cFile, strlen(cFile));
        	QJsonDocument jDoc = QJsonDocument::fromJson(Doc);
        	QJsonValue jVal = jDoc.object().value("Ids");
        	if (!jVal.isArray())
        		return;
        	QJsonArray jArr = jVal.toArray();
        	QVariantList list = jArr.toVariantList();
        	return;	// crash !!!!!!!!!
        }	
        
        int main(int argc, char *argv[])
        {
        	TestJson();
        }
        

        Call stack

        ucrtbased.dll!free_dbg_nolock(void * const block=0x00a840d8, const int block_use=16) Ligne 908	C++
        ucrtbased.dll!_free_dbg(void * block=0x00a840d8, int block_use=-1) Ligne 1030	C++
        AcqV7.exe!operator delete(void * block=0x00a840d8) Ligne 17	C++
        AcqV7.exe!operator delete(void * block=0x00a840d8, unsigned int __formal=16) Ligne 15	C++
        AcqV7.exe!QVariant::`scalar deleting destructor'(unsigned int)	C++
        >	AcqV7.exe!QList<QVariant>::node_destruct(QList<QVariant>::Node * from=0x00a87798, QList<QVariant>::Node * to=0x00a877a0) Ligne 463	C++
        AcqV7.exe!QList<QVariant>::dealloc(QListData::Data * data=0x00a87788) Ligne 836	C++
        AcqV7.exe!QList<QVariant>::~QList<QVariant>() Ligne 797	C++
        AcqV7.exe!TestJson() Ligne 67	C++
        AcqV7.exe!main(int argc=1, char * * argv=0x00a880e8) Ligne 76	C++
        
        J.HilkJ Offline
        J.HilkJ Offline
        J.Hilk
        Moderators
        wrote on last edited by
        #3

        @OcaJLSA

        your example does not crash for me, 5.9.1 with MSCV2015(32b).

        Exact Copy main.cpp:

        #include <QByteArray>
        #include <QJsonArray>
        #include <QJsonDocument>
        #include <QJsonObject>
        #include <QVariant>
        
        const char cFile[] = { "{\"Ids\":[0,1,2]}" };
        
        void TestJson(void)
        {
            QByteArray Doc = QByteArray::fromRawData(cFile, strlen(cFile));
            QJsonDocument jDoc = QJsonDocument::fromJson(Doc);
            QJsonValue jVal = jDoc.object().value("Ids");
            if (!jVal.isArray())
                return;
            QJsonArray jArr = jVal.toArray();
            QVariantList list = jArr.toVariantList();
            return;	// crash !!!!!!!!!
        }
        
        int main(int argc, char *argv[])
        {
            TestJson();
        }
        

        TestJson.pro

        QT += core
        QT -= gui
        
        CONFIG += c++11
        
        TARGET = TestJson
        CONFIG += console
        CONFIG -= app_bundle
        
        TEMPLATE = app
        
        SOURCES += main.cpp
        
        DEFINES += QT_DEPRECATED_WARNINGS
        

        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

        1 Reply Last reply
        3
        • O OcaJLSA

          I'm new to Qt
          I have a strange crash when a QVariantList is destroyed.
          I write a small code to reproduice it.
          I use another methode to decode the json array, but I want to understand why.
          Qt 5.5.1
          Visual Sudio 2017
          Windows 10 64bit

          const char cFile[] = { "{\"Ids\":[0,1,2]}" };
          
          void TestJson(void)
          {
          	QByteArray Doc = QByteArray::fromRawData(cFile, strlen(cFile));
          	QJsonDocument jDoc = QJsonDocument::fromJson(Doc);
          	QJsonValue jVal = jDoc.object().value("Ids");
          	if (!jVal.isArray())
          		return;
          	QJsonArray jArr = jVal.toArray();
          	QVariantList list = jArr.toVariantList();
          	return;	// crash !!!!!!!!!
          }	
          
          int main(int argc, char *argv[])
          {
          	TestJson();
          }
          

          Call stack

          ucrtbased.dll!free_dbg_nolock(void * const block=0x00a840d8, const int block_use=16) Ligne 908	C++
          ucrtbased.dll!_free_dbg(void * block=0x00a840d8, int block_use=-1) Ligne 1030	C++
          AcqV7.exe!operator delete(void * block=0x00a840d8) Ligne 17	C++
          AcqV7.exe!operator delete(void * block=0x00a840d8, unsigned int __formal=16) Ligne 15	C++
          AcqV7.exe!QVariant::`scalar deleting destructor'(unsigned int)	C++
          >	AcqV7.exe!QList<QVariant>::node_destruct(QList<QVariant>::Node * from=0x00a87798, QList<QVariant>::Node * to=0x00a877a0) Ligne 463	C++
          AcqV7.exe!QList<QVariant>::dealloc(QListData::Data * data=0x00a87788) Ligne 836	C++
          AcqV7.exe!QList<QVariant>::~QList<QVariant>() Ligne 797	C++
          AcqV7.exe!TestJson() Ligne 67	C++
          AcqV7.exe!main(int argc=1, char * * argv=0x00a880e8) Ligne 76	C++
          
          kshegunovK Offline
          kshegunovK Offline
          kshegunov
          Moderators
          wrote on last edited by
          #4

          In light of what @J-Hilk reports, you should search for a bug in the tracker to confirm this for Qt 5.5 and upgrade your Qt version.

          Read and abide by the Qt Code of Conduct

          1 Reply Last reply
          1
          • O Offline
            O Offline
            OcaJLSA
            wrote on last edited by
            #5

            It's impossible to update the Qt version, because my program will run on a wince7 device.
            QT 5.9.1 is not compatible.
            I will try to build on an other computer with QT 5.8
            Thanks

            Taz742T 1 Reply Last reply
            0
            • VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by
              #6

              Tested with Qt 5.8 and 5.5. both working

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              1 Reply Last reply
              1
              • O OcaJLSA

                It's impossible to update the Qt version, because my program will run on a wince7 device.
                QT 5.9.1 is not compatible.
                I will try to build on an other computer with QT 5.8
                Thanks

                Taz742T Offline
                Taz742T Offline
                Taz742
                wrote on last edited by
                #7

                @OcaJLSA
                5.7 5.5 work

                Do what you want.

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved