【问题标题】:Access violation at address in module 'executable.exe'. Read of address模块“executable.exe”中地址的访问冲突。读取地址
【发布时间】:2014-07-02 03:43:28
【问题描述】:

我在网上阅读了一些关于“访问冲突”的问题,但这对我来说很奇怪

我已经测试了一些“解决方案”,但没有结果

这是一段代码:

TDateTime CFileVersionInfo::GetFileDate() const
{
    FILETIME local;
    SYSTEMTIME st;
    TDateTime res;

    FILETIME    ft;
    ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
    ft.dwHighDateTime = m_FileInfo.dwFileDateMS;

    FileTimeToLocalFileTime(&ft, &local);
    FileTimeToSystemTime(&local, &st) ;
    //GetLocalTime(st);
    res = SystemTimeToDateTime(st) ;

    return res;
}

我可以毫无问题地制作或构建程序,但是当我运行程序时,如果我评论函数,它会显示访问冲突错误:

// TDateTime dateTime = fvi.GetFileDate();

程序完美运行

我不是 C++ 专业人士,我只是想制作一个供个人使用的程序,所以我向专家提出这个问题

编辑:

我已经解决了问题

TDateTime CFileVersionInfo::GetFileDate() const
{
    _FILETIME local;
    _SYSTEMTIME st;
    TDateTime res;

    FILETIME    ft;
    ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
    ft.dwHighDateTime = m_FileInfo.dwFileDateMS;

    FileTimeToLocalFileTime(&ft, &local);
    FileTimeToSystemTime(&local, &st) ;
    GetLocalTime(&st);           // <-- This is the solution.. for now...
    res = SystemTimeToDateTime(st) ;

    return res;
}

【问题讨论】:

    标签: c++builder access-violation


    【解决方案1】:

    您没有进行任何错误检查以确保 API 转换成功,因此您可能正在尝试转换垃圾数据。始终检查错误,例如:

    TDateTime CFileVersionInfo::GetFileDate() const
    {
        FILETIME local;
        SYSTEMTIME st;
    
        FILETIME ft;
        ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
        ft.dwHighDateTime = m_FileInfo.dwFileDateMS;
    
        if( FileTimeToLocalFileTime(&ft, &local) )
        {
            if( FileTimeToSystemTime(&local, &st) )
                return SystemTimeToDateTime(st);
        }
    
        return 0.0;
    }
    

    【讨论】:

      【解决方案2】:

      我已经解决了问题

      TDateTime CFileVersionInfo::GetFileDate() const
      {
          _FILETIME local;
          _SYSTEMTIME st;
          TDateTime res;
      
          FILETIME    ft;
          ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
          ft.dwHighDateTime = m_FileInfo.dwFileDateMS;
      
          FileTimeToLocalFileTime(&ft, &local);
          FileTimeToSystemTime(&local, &st) ;
          GetLocalTime(&st);           // <-- This is the solution.. for now...
          res = SystemTimeToDateTime(st) ;
      
          return res;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-15
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-01
        相关资源
        最近更新 更多