【问题标题】:Run-Time Check Failure #2 - stack around the variable 'osvi' was corrupted on mfc application运行时检查失败 #2 - 围绕变量“osvi”的堆栈在 mfc 应用程序上已损坏
【发布时间】:2013-08-24 17:14:45
【问题描述】:

我一直在互联网上搜索,我不知道为什么会发生这种情况,这并不是一个明显的数组问题。

函数如下:

BOOL IsOsCompatible()
{
    BOOL retVal = 0;
    OSVERSIONINFO osvi;
    ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    GetVersionEx(&osvi);
    if(osvi.dwMajorVersion == 6)
    {
        if(osvi.dwMinorVersion == 0)
        {
            if(SendErrorM("This program has not been tested on Windows Vista(TM).\nAre you sure you want to use it?",MB_YESNO) == IDYES)
                retVal = 1;
        }
        else if(osvi.dwMinorVersion == 1)
        { 
            retVal = 1;
        }
        else if(osvi.dwMinorVersion == 2)
        {
            if(SendErrorM("This program has not been tested on Windows 8(TM).\nAre you sure you want to use it?",MB_YESNO) == IDYES)
                retVal = 1;
        }
    }
    else
        SendErrorM("Your windows verison is incompatible with the minimum requirements of this application.",NULL);

    return retVal;

}

有什么想法吗?

【问题讨论】:

    标签: c++ mfc stack windowsversion


    【解决方案1】:

    OSVERSIONINFOEXOSVERSIONINFO 大,所以

        ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
    

    将在“外部”(周围)osvi 写入零。

    你想要

    OSVERSIONINFOEX osvi;
    ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
    

    或(通常更安全)

    OSVERSIONINFOEX osvi;
    ZeroMemory(&osvi, sizeof(osvi));
    

    【讨论】:

    • 对此我完全同意,当我尝试稍微清理代码并将OSVERSIONINFOEX更改为他的弟弟时,问题就出现了......
    【解决方案2】:

    额外的 X 是你的问题:

    OSVERSIONINFO osvi;
    ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
    

    Windows A、W 和 X 很糟糕。

    避免宏

    template <typename T>
    inline void zero_memory(T& m) {
        std::memset(&T, 0, sizeof(T));
    }
    

    【讨论】:

    • 是的,确实是这个问题,我认为它们会匹配,但似乎 EX 包含更多信息,导致尺寸不匹配,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2013-12-13
    • 2013-12-10
    • 2015-02-09
    • 2015-05-24
    • 2021-12-31
    相关资源
    最近更新 更多