【发布时间】:2011-08-12 19:11:13
【问题描述】:
我在发布模式下遇到访问冲突错误,但在调试模式下没有。
当我尝试关闭已打开以从中读取数据的文件时发生错误。这是代码:
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 中,我为此容器添加了一个监视。当程序试图关闭文件时,在上面的代码中,它使容器中存储的所有值无效,并崩溃。
两组代码不相关,甚至不是同一个对象的一部分,所以这表明堆在某个阶段被破坏了。
但为什么只有在发布模式下,这是因为发布模式优化了代码,而调试模式没有?
【问题讨论】:
-
这通常意味着您未能初始化一个变量(在调试中它将有一个默认值,在发布时它将有一个随机值)。检查编译器生成的警告(提高警告级别后)
标签: c++ visual-studio-2010 access-violation