0

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

4

3 回答 3

2

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

于 2012-05-08T20:57:04.023 回答
1

我解决了这个问题。

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

于 2012-05-09T14:51:36.153 回答
0

检查 baseName 是否有效。尝试打印出来。您可能会得到一个损坏的 baseName 副本,或者您的堆栈可能在此之前已被丢弃(相同的结果)。

于 2012-05-08T19:44:28.567 回答