how to solve unhandled exception error when using visual C++ 2008?

12,819

Solution 1

Try Something like...

 tm = localtime(&tv.tv_sec);
if(tm)
{
 printf("TIMESTAMP-START\t  %d:%02d:%02d:%d (~%d ms)\n", tm->tm_hour,
        tm->tm_min, tm->tm_sec, tv.tv_usec,
        tm->tm_hour * 3600 * 1000 + tm->tm_min * 60 * 1000 +
        tm->tm_sec * 1000 + tv.tv_usec / 1000); 

 start = tm->tm_hour * 3600 * 1000 + tm->tm_min * 60 * 1000 +
  tm->tm_sec * 1000 + tv.tv_usec / 1000;
}
else
{
 // failed to retrive local time
}

Solution 2

"Access violation reading location 0x00000008"

An address that low is probably caused by accessing a null pointer. In this case, tm is probably 0 because of a problem with localtime or gettimeofday. You get address 0x08 instead of 0x00 because the compiler is trying to read a value 8 bytes into the struct.

Solution 3

The type of member tv.tv_sec is long, but localtime expects a time_t * parameter. In VC6 this worked because both long and time_t were 32-bit, but in VS2008 time_t is a 64-bit type so they are incompatible.

This should fix it:

//add to beginning of stampstart function:
time_t t;

//... other code...

//put this instead of call to localtime:
t = tv.tv_sec;
tm = localtime(&t);

Solution 4

The access violation refers address 0x00000008, which probably means that your code is accessing a field at offset 8 in a struct to which you point with a NULL pointer. I guess that localtime returns a NULL pointer. Check this.

Share:
12,819
make
Author by

make

Thanks to everyone who shared and share his/her idears with me ...

Updated on June 05, 2022

Comments

  • make
    make almost 2 years

    Could someone please help me to solve unhandled exception error when using visual C++ 2008? the error is displayed as follow: Unhandled exception at 0x00411690 in time.exe: 0xC0000005: Access violation reading location 0x00000008

    Some details:
    - tm 0x00000000 {tm_sec=??? tm_min=??? tm_hour=??? ...} tm *
    tm_sec CXX0030: Error: expression cannot be evaluated
    ...

    Actually when I used visual c++ 6 in the past, there weren't any error and the program was running fine. But now ehen I use visual 2008, I am getting this Unhandled exception error.

    Here is the program:

    ...
    int gettimeofday(struct timeval *tv, struct timezone *tz)
    {
      FILETIME ft;
      unsigned __int64 tmpres = 0;
      static int tzflag = 0;
    
      if (NULL != tv)
      {
        GetSystemTimeAsFileTime(&ft);
    
        tmpres |= ft.dwHighDateTime;
        tmpres <<= 32;
        tmpres |= ft.dwLowDateTime;
    
        tmpres /= 10;  /*convert into microseconds*/
        /*converting file time to unix epoch*/
        tmpres -= DELTA_EPOCH_IN_MICROSECS; 
        tv->tv_sec = (long)(tmpres / 1000000UL);
        tv->tv_usec = (long)(tmpres % 1000000UL);
      }
    
      if (NULL != tz)
      {
        if (!tzflag)
        {
          _tzset();
          tzflag++;
        }
        tz->tz_minuteswest = _timezone / 60;
        tz->tz_dsttime = _daylight;
      }
    
      return 0;
    }
    
    
    uint32_t stampstart()
    {
     struct timeval  tv;
     struct timezone tz;
     struct tm      *tm;
     uint32_t         start;
    
     gettimeofday(&tv, &tz);
     tm = localtime(&tv.tv_sec);
    
     printf("TIMESTAMP-START\t  %d:%02d:%02d:%d (~%d ms)\n", tm->tm_hour,
            tm->tm_min, tm->tm_sec, tv.tv_usec,
            tm->tm_hour * 3600 * 1000 + tm->tm_min * 60 * 1000 +
            tm->tm_sec * 1000 + tv.tv_usec / 1000);   /////---debugger stops here---
    
     start = tm->tm_hour * 3600 * 1000 + tm->tm_min * 60 * 1000 +
      tm->tm_sec * 1000 + tv.tv_usec / 1000;
    
     return (start);
    
    }
    

    thanks for your replies: