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. reading file line by line crashes
Forum Updated to NodeBB v4.3 + New Features

reading file line by line crashes

Scheduled Pinned Locked Moved Solved General and Desktop
qt 4.8qtextstreamreadline
17 Posts 5 Posters 3.6k 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.
  • M mourad_bilog
    11 Mar 2019, 10:22

    Hello everyone,

    I've a program that open a file (380 Mo) into a QTextStream and read data line by line with the readLine function.
    Recenly a have encoutred a crash problem when reading data and I've tried some manipulation by the crash persists.
    Note that every line contains some big data and lines ends with \n\r.

    Below my code :

    QFile srfile(mScriptFileName);  
    
    	if (!srfile.open(QIODevice::ReadOnly | QIODevice::Text))
    	{
    		mExistMajData = false;	
    		mIsError = true;
    		return ;
    	}
    
    	QTextStream in(&srfile);
    
    	while (!in.atEnd() && !mIsError) 
    	{
    		qApp->processEvents(QEventLoop::WaitForMoreEvents);
    
    		//lecture des données lignes par ligne		
    		try 
    		{ 
    			line_data = in.readLine(); // it crashes here (eg. PJ)
    			record_data = line_data.split("<|>");
    			qDebug() << "Fin lecture d'une ligne n°" << QString::number(++nb_cmd) << record_data[3] << QTime::currentTime().toString("hh:mm") << endl ;
    		} 
    		catch ( const std::bad_alloc & ) 
    		{ 
    			 std::cerr << "Erreur : mémoire insuffisante.\n"; 
    		} 
    		catch ( const std::out_of_range & ) 
    		{ 
    			 std::cerr << "Erreur : débordement de mémoire.\n"; 
    		} 
    		catch ( const std::exception & e ) 
    		{ 
    			std::cerr << e.what(); 
    		}
    

    The call stack indicated the following :

     	msvcr80d.dll!memcpy(unsigned char * dst=0x28446f80, unsigned char * src=0x01b26ffa, unsigned long count=32768)  Ligne 188	Asm
     	QtCored4.dll!QString::append(const QString & str={...})  Ligne 1244 + 0x2d octets	C++
     	QtCored4.dll!QString::operator+=(const QString & s={...})  Ligne 225 + 0x13 octets	C++
     	QtCored4.dll!QTextStreamPrivate::fillReadBuffer(__int64 maxBytes=-1)  Ligne 568 + 0x5b octets	C++
     	QtCored4.dll!QTextStreamPrivate::scan(const QChar * * ptr=0x0014a42c, int * length=0x0014a434, int maxlen=0, QTextStreamPrivate::TokenDelimiter delimiter=EndOfLine)  Ligne 730 + 0x2a octets	C++
     	QtCored4.dll!QTextStream::readLine(__int64 maxlen=0)  Ligne 1588 + 0x16 octets	C++
    >	TheriaqueUpdater.exe!TheriaUpdater::NewUpdateBase()  Ligne 3377 + 0x14 octets	C++
     	TheriaqueUpdater.exe!TheriaUpdater::start()  Ligne 1479	C++
     	TheriaqueUpdater.exe!TheriaUpdater::Update()  Ligne 1199	C++
     	TheriaqueUpdater.exe!TheriaUpdater::qt_metacall(QMetaObject::Call _c=InvokeMetaMethod, int _id=8, void * * _a=0x0014b154)  Ligne 96 + 0x8 octets	C++
     	QtCored4.dll!QMetaObject::activate(QObject * sender=0x01aa4888, int from_signal_index=29, int to_signal_index=30, void * * argv=0x0014b154)  Ligne 3063 + 0x46 octets	C++
     	QtCored4.dll!QMetaObject::activate(QObject * sender=0x01aa4888, const QMetaObject * m=0x657a2374, int from_local_signal_index=2, int to_local_signal_index=3, void * * argv=0x0014b154)  Ligne 3142 + 0x15 octets	C++
     	QtGuid4.dll!QAbstractButton::clicked(bool _t1=false)  Ligne 180 + 0x17 octets	C++
     	QtGuid4.dll!QAbstractButtonPrivate::emitClicked()  Ligne 517	C++
     	QtGuid4.dll!QAbstractButtonPrivate::click()  Ligne 509	C++
     	QtGuid4.dll!QAbstractButton::mouseReleaseEvent(QMouseEvent * e=0x0014b788)  Ligne 1086	C++
     	QtGuid4.dll!QWidget::event(QEvent * event=0x0014b788)  Ligne 6064	C++
     	QtGuid4.dll!QAbstractButton::event(QEvent * e=0x0014b788)  Ligne 1048	C++
     	QtGuid4.dll!QPushButton::event(QEvent * e=0x0014b788)  Ligne 651	C++
     	QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x01aa4888, QEvent * e=0x0014b788)  Ligne 3541 + 0x11 octets	C++
     	QtGuid4.dll!QApplication::notify(QObject * receiver=0x01aa4888, QEvent * e=0x0014b788)  Ligne 3240 + 0x2f octets	C++
     	QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x01aa4888, QEvent * event=0x0014b788)  Ligne 516	C++
     	QtCored4.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver=0x01aa4888, QEvent * event=0x0014b788)  Ligne 188 + 0x38 octets	C++
    
    

    I've reinstalled the VC redistribuable. Rebuil all the project. Search if I can free QTextStream buffer but the problem persists

    Can anyone tell me what wrong et what I must to do to resolve this. Some

    Thanks in advance

    J Offline
    J Offline
    J.Hilk
    Moderators
    wrote on 11 Mar 2019, 12:18 last edited by
    #3

    hi @mourad_bilog

    Even if this doesn't crash your application, you should check if recordData has indeed more than 3 entries!

    qDebug() << "Fin lecture d'une ligne n°" << QString::number(++nb_cmd) << record_data[3] << QTime::currentTime().toString("hh:mm") << endl ;

    besides that, I see this

    qApp->processEvents(QEventLoop::WaitForMoreEvents);

    potentially causing serious issues, do not spin the event loop manually!


    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
    2
    • M Offline
      M Offline
      mourad_bilog
      wrote on 11 Mar 2019, 13:42 last edited by
      #4

      First, Thanks for reply.

      @jsulm it's a memory crash. Below the error occured :

      Exception de première chance à 0x0fcbd5be (msvcr80d.dll) dans TheriaqueUpdater.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x2804e000.
      Exception non gérée à 0x0fcbd5be (msvcr80d.dll) dans TheriaqueUpdater.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x2804e000.
      

      @J-Hilk the crash occus on in.readLine. The recod data has 6 entries and it's shown evey time.
      I've commented the eventLoop but the application still crashes.

      Note that line data lengths can be around 1 milion carachtars.

      J J 2 Replies Last reply 11 Mar 2019, 13:45
      0
      • M mourad_bilog
        11 Mar 2019, 13:42

        First, Thanks for reply.

        @jsulm it's a memory crash. Below the error occured :

        Exception de première chance à 0x0fcbd5be (msvcr80d.dll) dans TheriaqueUpdater.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x2804e000.
        Exception non gérée à 0x0fcbd5be (msvcr80d.dll) dans TheriaqueUpdater.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x2804e000.
        

        @J-Hilk the crash occus on in.readLine. The recod data has 6 entries and it's shown evey time.
        I've commented the eventLoop but the application still crashes.

        Note that line data lengths can be around 1 milion carachtars.

        J Offline
        J Offline
        jsulm
        Lifetime Qt Champion
        wrote on 11 Mar 2019, 13:45 last edited by
        #5

        @mourad_bilog said in reading file line by line crashes:

        Note that line data lengths can be around 1 milion carachtars

        How long is the line you're reading when the app is crashing?

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • M mourad_bilog
          11 Mar 2019, 13:42

          First, Thanks for reply.

          @jsulm it's a memory crash. Below the error occured :

          Exception de première chance à 0x0fcbd5be (msvcr80d.dll) dans TheriaqueUpdater.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x2804e000.
          Exception non gérée à 0x0fcbd5be (msvcr80d.dll) dans TheriaqueUpdater.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x2804e000.
          

          @J-Hilk the crash occus on in.readLine. The recod data has 6 entries and it's shown evey time.
          I've commented the eventLoop but the application still crashes.

          Note that line data lengths can be around 1 milion carachtars.

          J Offline
          J Offline
          J.Hilk
          Moderators
          wrote on 11 Mar 2019, 13:45 last edited by
          #6

          @mourad_bilog said in reading file line by line crashes:

          @J-Hilk the crash occus on in.readLine. The recod data has 6 entries and it's shown evey time.

          do not base this solely on faith:

          if(record_data.size()> 3)
          qDebug() << "Fin lecture d'une ligne n°" << QString::number(++nb_cmd) << record_data[3] << QTime::currentTime().toString("hh:mm") << endl ;
           else
           qDebug() << "would have crashed";
          

          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
          2
          • M Offline
            M Offline
            mourad_bilog
            wrote on 11 Mar 2019, 14:35 last edited by
            #7

            @jsulm said in reading file line by line crashes:

            How long is the line you're reading when the app is crashing?

            About 1 200 000 charactars.

            1 Reply Last reply
            0
            • M Offline
              M Offline
              mourad_bilog
              wrote on 11 Mar 2019, 14:36 last edited by
              #8

              @J-Hilk
              I've commented that line but the same occurs.

              J 1 Reply Last reply 11 Mar 2019, 14:41
              0
              • M mourad_bilog
                11 Mar 2019, 14:36

                @J-Hilk
                I've commented that line but the same occurs.

                J Offline
                J Offline
                J.Hilk
                Moderators
                wrote on 11 Mar 2019, 14:41 last edited by
                #9

                @mourad_bilog alight thanks thumbs up

                question , is this Qt4?
                and is this a multi threaded project, and is do you read and write to that file from different places ?


                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.

                M 1 Reply Last reply 11 Mar 2019, 14:44
                0
                • J J.Hilk
                  11 Mar 2019, 14:41

                  @mourad_bilog alight thanks thumbs up

                  question , is this Qt4?
                  and is this a multi threaded project, and is do you read and write to that file from different places ?

                  M Offline
                  M Offline
                  mourad_bilog
                  wrote on 11 Mar 2019, 14:44 last edited by
                  #10

                  @J.Hilk
                  question , is this Qt4? yes. but the program runs correctly for some years.

                  and is this a multi threaded project, : No, it's one thread.

                  and is do you read and write to that file from different places : No, I just read from that file. I just open it in "ReadOnly" mode.

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    mourad_bilog
                    wrote on 11 Mar 2019, 14:51 last edited by
                    #11

                    I've read in a post how has similar problem that he has solved the problem using file.readLine no QTextStream.readLine(). What is the difference between the 2 functions ?

                    1 Reply Last reply
                    0
                    • Christian EhrlicherC Offline
                      Christian EhrlicherC Offline
                      Christian Ehrlicher
                      Lifetime Qt Champion
                      wrote on 11 Mar 2019, 15:04 last edited by
                      #12

                      @mourad_bilog said in reading file line by line crashes:

                      1 200 000

                      really one line?

                      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                      Visit the Qt Academy at https://academy.qt.io/catalog

                      1 Reply Last reply
                      0
                      • M Offline
                        M Offline
                        mourad_bilog
                        wrote on 11 Mar 2019, 15:24 last edited by
                        #13

                        @Christian-Ehrlicher there's many lines witch everyone exceed 1 milion charactars.
                        Is this a problem ? That can exceed what QTextStream buffer contains ?

                        1 Reply Last reply
                        0
                        • Christian EhrlicherC Offline
                          Christian EhrlicherC Offline
                          Christian Ehrlicher
                          Lifetime Qt Champion
                          wrote on 11 Mar 2019, 15:52 last edited by
                          #14

                          At least I would consider this - it's a 2.4MB huge QString, should be ok but who knows. I would simply try QFile::readLine(), split the QByteArray and convert to QString as late as possible (if needed at all)

                          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                          Visit the Qt Academy at https://academy.qt.io/catalog

                          1 Reply Last reply
                          2
                          • M Offline
                            M Offline
                            mourad_bilog
                            wrote on 12 Mar 2019, 11:11 last edited by
                            #15

                            Checking Windows events journal, it indicates that msvcr causes this crash, that's true ?

                            Nom de l’application défaillante Updater.exe, version : 2.7.4.0, horodatage : 0x5a018f88
                            Nom du module défaillant : MSVCR80.dll, version : 8.0.50727.9445, horodatage : 0x5a7bc74c
                            Code d’exception : 0xc0000005
                            Décalage d’erreur : 0x0001508e
                            ID du processus défaillant : 0x19a0
                            Heure de début de l’application défaillante : 0x01d4d8a5bb99dd52
                            Chemin d’accès du module défaillant: C:\WINDOWS\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.9445_none_d08c58b4442ba54f\MSVCR80.dll
                            ID de rapport : 6c470b7e-a3b2-4584-b404-3d7957545ead
                            Nom complet du package défaillant : 
                            ID de l’application relative au package défaillant : 
                            

                            I've re-installed Visual redistribuable 2005 but the problem persists. Note that I dont found msvcr80 in the system32 not like other versions msvcr71, msvcr10, etc.

                            Does this the problem ?

                            1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on 12 Mar 2019, 22:01 last edited by
                              #16

                              Hi,

                              Did you monitor your application RAM usage ?

                              Interested in AI ? www.idiap.ch
                              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              1
                              • M Offline
                                M Offline
                                mourad_bilog
                                wrote on 22 Mar 2019, 06:24 last edited by
                                #17

                                Finally I changed reading mode to read directly from the data file. It's most faster and just I was care to encode data when reading to keep special charcatars.

                                Thanks all for your ideas

                                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