最近,我正在开发一个小型OpenGL游戏。它的所有内容都可以在调试版本中正常运行,但是在构建发行版时,会遇到一个奇怪的Access Violation异常。

我搜索了整个代码,当我尝试打开文件时似乎出现了问题。这是我认为问题出在哪里的函数:

#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以查找所需的文件。

最佳答案

正如个人(和教学)经验的一般规则一样:在Debug可以正常运行且Release崩溃的情况下,有90%以上是由于未初始化的变量引起的。在C ++中,这比在C中难一些,但这是一个非常普遍的问题。使用它们之前,请确保所有变量(例如baseName)都已初始化。

关于c++ - 运行发行版应用程序时发生访问冲突异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10504714/

10-11 22:47
查看更多