运行发布的应用程序时出现访问冲突异常

时间:2012-05-08 18:56:46

标签: c++ release access-violation

最近我一直在开发一款小型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以查找所需的文件。

3 个答案:

答案 0 :(得分:1)

正如个人(和教学)经验的一般规则:> 90%的情况下,Debug工作正常,发布崩溃是由未初始化的变量引起的。这在C ++中比在C中更难做,但这是一个非常常见的问题。确保在使用之前初始化所有变量(如baseName)。

答案 1 :(得分:1)

我解决了这个问题。

一切都在发生,因为我使用glsdk的Debug构建库进行了Release构建。更改为发布构建库可以解决问题。

答案 2 :(得分:0)

检查baseName是否有效。尝试打印出来。您可能正在获取baseName的损坏副本,或者您的堆栈可能在该点之前被删除(相同的结果)。