0

我有这段代码在使用 g++ 的 Linux 上工作:

GLuint Shader::initShader_(GLenum shaderType, const std::string& shaderFilename)
{
    std::ifstream inputFile(shaderFilename.c_str());
    if (inputFile.is_open() == false)
    {
        std::ostringstream oss;
        oss << "Shader " << shaderFilename << " doesn't exist!";
        print(LOG_LEVEL::ERROR, oss.str());
    }
    ...
}

其中三个点代表一些代码。在 g++ 和 Visual Studio (2012) 上,代码都可以编译。但是在 Visual Studio 中,第一行会引发访问冲突异常。这实际上发生在打开文件时,调试器将我重定向到do_always_noconv但我不明白这个问题。

包含文件名的字符串是有效的,并且程序试图打开的文件在 good 目录中,调试器在这个目录中工作。我猜问题不是来自文件本身,因为如果流无法打开它,那么我仍然可以输入下一行而不会出现访问冲突。

有没有人已经遇到过这个问题或有想法?再次使用 g++ 在 Linux 上运行没有任何问题。

谢谢你的帮助。

4

2 回答 2

0

正如 PaulH 上面建议的那样,我检查了我最近编写的一些数组代码,错误来自一些错误的索引和指针。但是我仍然不明白为什么数组代码中的错误与ifstream有关。感谢保罗!

于 2014-03-10T19:53:22.780 回答
0

访问冲突异常并不表示文件存在问题,而是表示 ifstream 对象或字符串的内存表示存在问题。开始寻找内存损坏。

确保您为构建类型引用了正确的 GLSDK 库。例如,调试版本应该引用调试库,而发布版本应该引用发布库。

于 2014-03-09T20:25:21.240 回答