Странное нарушение прав доступа ifstream под Visual Studio 2012

У меня есть этот кусок кода, работающий на Linux с g ++:

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 но я не понимаю проблемы.

Строка, содержащая имя файла, является допустимой, и файл, который пытается открыть программа, находится в хорошем каталоге, и отладчик работает в этом каталоге. Я предполагаю, что проблема не в самом файле, потому что, если поток не может открыть его, я мог бы перейти на следующую строку без нарушения прав доступа.

Кто-нибудь уже сталкивался с этой проблемой или есть идея? Снова это работало без проблем на Linux с g ++.

Спасибо за вашу помощь.

0

Решение

Исключение нарушения прав доступа указывает не на проблему с файлом, а на представление в памяти объекта ifstream или строки в памяти. Начните искать повреждения памяти.

Убедитесь, что вы ссылаетесь на правильные библиотеки GLSDK для вашего типа сборки. например сборки отладки должны ссылаться на библиотеки отладки, а сборки выпуска должны ссылаться на библиотеки выпуска.

0

Другие решения

Как указывал выше PaulH, я проверил некоторый код массива, который недавно написал, и ошибка возникла из-за неправильных индексов и указателей. Однако я до сих пор не понимаю, почему ошибки в коде массива как-то связаны с ifstream. Благодаря PaulH!

0

По вопросам рекламы [email protected]