每当我退出我的程序时,它都会给我这个异常“0xC0000022:一个进程请求访问一个对象,但没有被授予这些访问权限。”
它在 _file.c 中名为 _lock_file 的函数末尾中断。
在尝试缩小问题原因的范围后,我发现如果我删除程序中的所有 fclose() 函数调用,然后清理并重建我的程序,它不会崩溃。即使函数本身从未被调用,它仍然会崩溃。显然这个方案并不理想。
当我尝试改用 fstream 时,它在程序开始时产生了类似的崩溃。
另外值得一提的是,我的程序使用了 SDL。
编辑:有人要求提供一个最小示例,这就是我想出的。
主要.cpp
#include <stdlib.h>
#include <SDL.h>
/*...*/
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
/*...*/
int main( int argc, char **argv)
{
if(false)
fclose(NULL);
return 0;
}
绘图.cpp
/*...*/
如果我运行它,它将在退出时崩溃,就像我上面提到的那样。是的,draw.cpp 已被完全注释掉,但如果我将其从项目中删除,程序将运行良好。所有其他文件都已从项目中删除。
Edit2:作为对 karlphillip 的回应,我决定仔细检查它是否真的在运行,并且看起来它在这个例子开始时确实崩溃了。
也是一个Win32项目。
最佳答案
退出时崩溃通常意味着堆在程序执行期间损坏。尝试使用内存检查器查找位置。尝试使用 _CrtDumpMemoryLeaks()
关于c++ - 程序在退出时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502685/