最近我一直在开发一款小型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以查找所需的文件。
答案 0 :(得分:1)
正如个人(和教学)经验的一般规则:> 90%的情况下,Debug工作正常,发布崩溃是由未初始化的变量引起的。这在C ++中比在C中更难做,但这是一个非常常见的问题。确保在使用之前初始化所有变量(如baseName
)。
答案 1 :(得分:1)
我解决了这个问题。
一切都在发生,因为我使用glsdk的Debug构建库进行了Release构建。更改为发布构建库可以解决问题。
答案 2 :(得分:0)
检查baseName是否有效。尝试打印出来。您可能正在获取baseName的损坏副本,或者您的堆栈可能在该点之前被删除(相同的结果)。