最近,我正在开发一个小型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/