Нарушение прав доступа по адресу в модуле «executable.exe». Чтение адреса

Я читал в сети о некоторых проблемах с «Нарушением прав доступа», но для меня это очень странно.

Я протестировал некоторые «решения», но безрезультатно

Это кусок кода:

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;
}

person tttony    schedule 10.07.2011    source источник


Ответы (2)


Вы не выполняете проверку ошибок, чтобы убедиться, что преобразования 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;
}
person Remy Lebeau    schedule 12.07.2011

я решил проблему

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;
}
person tttony    schedule 27.08.2011