Program crashing

Posted on 1998-09-02
Last Modified: 2008-02-01
I have a small program which does some strings extractions from a text file. The problem I have is that the compiler does not detect any error, but when I run the program it crashes with a fatal error. Here is the code which seems to be creating the problem:

int      const maxsize = 256;
char      LineIn[maxsize];
f.ReadString(LineIn,maxsize -1);

After doing a step by step testing, it seems that it is the last line which is creating the problem.

Below is the error message I get:

TADS caused an invalid page fault in
module TADS.EXE at 014f:0041e239.
EAX=37202020 CS=014f EIP=0041e239 EFLGS=00010216
EBX=00000000 SS=0157 ESP=0072eff4 EBP=0072f240
ECX=0072f04c DS=0157 ESI=0072f04c FS=2477
EDX=00a71080 ES=0157 EDI=00000004 GS=0000
Bytes at CS:EIP:
83 78 f4 01 7f 05 3b 78 fc 7e 0f 8b ce e8 43 ff
Stack dump:
00000004 0072f04c 0041e332 00000004 0072f058 0072f04c 0041e3c0 00000004 0072f058 0072f228 0072f7a0 00402063 0072f058 00008298 0072f274 0042d14c

Can anyone tell me why it is crashing and how I should change my code if necessary ?

Question by:decornez
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +5

Expert Comment

ID: 1171924
The only ReadString I know of is in CArchive (MFC)

presumably f is _properly_constructed_ and _open_ one of these ?

Expert Comment

ID: 1171925
I know a little MFC, the ReadString is part of CArchive, CStdioFile, and CInternetFile.

f has been opened like:
f.Open (Filename, Flags);

Please post more of your code so more people can help.  Thanks.

Expert Comment

ID: 1171926
are you using UNICODE?!!
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Expert Comment

ID: 1171927
Is it the first time that read the last line?

Expert Comment

ID: 1171928

TCHAR LineIn[maxsize];


Expert Comment

ID: 1171929
Is that an answer or a guess?

Expert Comment

ID: 1171930
You're right thresh on where ReadString is,

should also be in CGopherFile and CHttpFile which derive of CInternetFile (I haven't checked if it's been re-access specified as private - but MFC doesn't usually do that).

Anyway more info would help with a solution.

Author Comment

ID: 1171931

I have tried TCHAR and it does not make any difference. So in order to be more precise, here is the listing of my code. Please note that the index number in my arrays is set at 1 only as I am just testing. Please ignore some of the comments in there which pertain to previously erased lines of code. So, Here we go (There is quite a lot):

      // TODO: Add extra initialization here

      //Open the file C:\Tads\DPRM files\MDRYieldCurvesCcy.HKD.01
      CStdioFile      f;//or should it only be CFile ??
      if (f.Open("C:\\Tads\\DPRM files\\MDRYieldCurvesCcy.HKD.01",CFile::modeRead)==FALSE)
            return TRUE;

      //Create an archive object
      CArchive ar( &f, CArchive::load);

      //Read data from the file
      char      s1[10];
      LONG      l1 = 104;
      int      p1 = f.Seek( l1, CFile::begin );
      //LONG lOffset = 104, lActual;
      //lActual = f.Seek( lOffset, CFile::begin );
      int bytesread1 = f.Read(s1,3);
      m_CcyEdit = s1;

      char      s2[10];
      LONG l2 = 301;
      int p2 = f.Seek( l2, CFile::begin );
      int bytesread2 = f.Read(s2,3);
      m_STDayCount = s2;

      char      s3[10];
      LONG l3 = 305;
      int p3 = f.Seek( l3, CFile::begin );
      int bytesread3 = f.Read(s3,3);
      m_STBase = atof(s3);

      m_FutDayCount = "";
      m_FutBase = "";

      char      s4[10];
      LONG l4 = 325;
      int p4 = f.Seek( l4, CFile::begin );
      int bytesread4 = f.Read(s4,3);
      m_LTDayCount = s4;

      char      s5[10];
      LONG l5 = 329;
      int p5 = f.Seek( l5, CFile::begin );
      int bytesread5 = f.Read(s5,3);
      m_LTBase = atof(s5);

      char      s6[10];
      LONG l6 = 358;
      int p6 = f.Seek( l6, CFile::begin );
      int bytesread6 = f.Read(s6,9);
      m_FXRate = atof(s6);

      char      s7[20];
      LONG l7 = 257;
      int p7 = f.Seek( l7, CFile::begin );
      int bytesread7 = f.Read(s7,9);
      m_ValDate = s7;

      //We now extract the data where which are affected by the
      //variable line length problem. Meaning that depending on the
      //number of digits that the number to the right of the "-" sign has,
      //then the line will have a different total length. Therefore we need
      //to find the position of the end of the line before we can copy
      //the necessary number of characters the right of the "-" sign
      //and the end of the line.

      //We define the different breakpoints and area sizes to be read
      int      addontenor1 = 0;
      int      addoninstru1 = 3;
      int      addonbid1 = 9;
      int      sizetenor = 3;
      int      sizeinstru1 = 4;
      int      sizebid1 = 10;

//      //We extract the line to calculate the various positions
//      int      const maxsize = 256;//256 is the maximum size of a line
//      char      LineIn[maxsize];
//      f.ReadString(LineIn,maxsize);
//      int      eoladdon = strcspn(LineIn,"\n");
//      int      anchorchar = strcspn(LineIn,"-");
//      m_HkdBid8 = eoladdon;
//      m_HkdAsk8 = anchorchar;

      //Start of the loop using the for statement
      int            i = 1;
      int      const      arraysize = 1;
            //for      (i = 0; i <= arraysize; i++) {//opening of the for loop

      //We take position 370 as the anchor point to start with in the file
      //and we start to work our way down from there
      int linestart1 = 370;
      int linepos1 = f.Seek( linestart1, CFile::begin );
      //We define the arrays where we are going to store
      //what we read from the file

      CString      tenor[arraysize];
      CString      instru[arraysize];
      double      bid[arraysize];
      double      ask[arraysize];

      int            tenorread[arraysize];
      int            instruread[arraysize];
      int            bidread[arraysize];
      int            askread[arraysize];

      char      tenorbuff[10];
      char      instrubuff[10];
      char      bidbuff[15];
      char      askbuff[15];

      //We now read the various data we are looking for
      //using our linestart reference. We start by reading the tenor.
      tenorread[i] = f.Read(tenorbuff,sizetenor);//Here we read the tenor for line 1
      tenor[i] = tenorbuff;
      m_HkdTenor1 = tenor[i];
      //Here we read the Instrument
      linepos1 = f.Seek( linestart1 + addoninstru1, CFile::begin );
      instruread[i] = f.Read(instrubuff,sizeinstru1);
      instru[i] = instrubuff;
      m_HkdInstru1 = instru[i];

      //Here we read the Bid side
      linepos1 = f.Seek( linestart1 + addonbid1, CFile::begin);
      bidread[i] = f.Read(bidbuff,sizebid1);
      bid[i] = atof(bidbuff);
      m_HkdBid1 = bid[i];

      //Here we read the Offer side
      linepos1 = f.Seek( linestart1, CFile::begin);
      //We extract the line to calculate the various positions
      int      const maxsize = 256;//256 is the maximum size of a line
      TCHAR      LineIn[maxsize];
      f.ReadString(LineIn,maxsize -1);      //################################
      //char      linebuff[256];
      //int            lineread[arraysize];
      //lineread[i] = f.Read(linebuff, 10);

//      int      eoladdon = strcspn(LineIn,"\n");
//      int      anchorchar = strcspn(LineIn,"-");
//      linepos1 = f.Seek( linestart1 + anchorchar + 2, CFile::begin);
//      askread[i] = f.Read(askbuff,(eoladdon - anchorchar - 2));
//      ask[i] = atof(askbuff);
//      m_HkdAsk1 = ask[i];

      //Close the archive

      //Close the file

      //Update the screen with the new values of m_CcyEdit

      //}//close of the for loop


      return TRUE;  // return TRUE unless you set the focus to a control
                    // EXCEPTION: OCX Property Pages should return FALSE

            //}//close of the for loop


Expert Comment

ID: 1171932
Try reduceing maxsize to 255.   256 is a 9 bit number.

Accepted Solution

kinkajou earned 30 total points
ID: 1171933
Use a CString for LineIn instead of a char.

Expert Comment

ID: 1171934
kinkajou - That is MFC.  I do not think decornez is using MFC.

Author Comment

ID: 1171935
Sorry guys,

I am moving to a different country (Hong Kong)and my PC has been packed. So I will not be able to try your proposed answers/comments probably for another 2 to 3 weeks. I will revert to you as soon as I am back online at home (I am using my office PC to post this message).


Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

626 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question