Я получаю сообщение об ошибке доступа в режиме выпуска, но не в режиме отладки.
Ошибка возникает при попытке закрыть файл, который был открыт для чтения данных. Это код:
FILE *file;
GLubyte *transferFunctionData = NULL;
transferFunctionData = new GLubyte(size);
if ( (file = fopen(fileName, "rb")) == NULL)
{
printf("Cannot open file.\n");
exit(1);
}
if ( fread(transferFunctionData, sizeof(GLubyte), size, file) != size)
{
if (feof(file))
printf("Premature end of file.");
else
printf("File read error.");
exit(1);
}
fclose(file);
Что интересно, так это то, что он изменяет значения в указателе на вектор указателей. Не уверен, если я правильно говорю, это контейнер данных
vector<CustomObject*> *data;
В Visual Studio я добавляю часы для этого контейнера. Когда программа пытается закрыть файл в приведенном выше коде, она делает недействительными все значения, хранящиеся в контейнере, и вылетает.
Оба набора кода не связаны между собой, они даже не являются частью одного и того же объекта, поэтому это наводит меня на мысль, что куча повреждена на некотором этапе.
Но почему только в режиме выпуска это происходит из-за оптимизации кода в режиме выпуска, а не в режиме отладки?