簡體   English   中英

運行發布的應用程序時出現訪問沖突異常

[英]Access Violation exception when running a release-built application

最近我一直在開發一款小型OpenGL游戲。 其中的所有內容都可以通過調試版本運行良好,但是當我構建版本時,我收到一個奇怪的訪問沖突異常。

我搜索了代碼,似乎當我嘗試打開文件時出現問題。 這是我認為問題來自的功能:

#define LOCAL_FILE_DIR "data\\"
#define GLOBAL_FILE_DIR "..\\data\\"

std::string FindFile(const std::string &baseName)
{
    std::string fileName = LOCAL_FILE_DIR + baseName;
    std::ifstream testFile(fileName.c_str()); // The code breaks here
    if(testFile.is_open())
        return fileName;

    fileName = GLOBAL_FILE_DIR + baseName;
    testFile.open(fileName.c_str());
    if(testFile.is_open())
        return fileName;

    throw std::runtime_error("Could not find the file " + baseName);
}

此代碼與加載GLSL着色器相關聯。 函數獲取着色器的文件名,然后將其傳遞給FindFile以查找所需的文件。

正如個人(和教學)經驗的一般規則:> 90%的情況下,Debug工作正常,發布崩潰是由未初始化的變量引起的。 這在C ++中比在C中更難做,但這是一個非常常見的問題。 確保在使用之前初始化所有變量(如baseName )。

我解決了這個問題。

一切都在發生,因為我使用glsdk的Debug構建庫進行了Release構建。 更改到發布構建庫可以解決問題。

檢查baseName是否有效。 嘗試打印出來。 您可能正在獲取baseName的損壞副本,或者您的堆棧可能在該點之前被刪除(相同的結果)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM