我正在尝试将代码从初步项目移动到新项目(均在Visual Studio 2012下完成)。
原始版本已作为控制台应用程序制作,我希望新版本是 Windows应用程序。我创建了一个空项目并移动了文件/设置了库路径。
这是一个带着色器的简单OpenGL程序。
即使我切换回创建具有相同.vcproj属性的控制台应用程序,也会发生在Release和Debug上的致命错误。 你可以在下面找到它们。
为什么我的程序会崩溃?所有库路径都设置得很好,因为它与使用与DID相同的文件的先前项目所使用的设置相同(在不同的解决方案中)。
释放崩溃位置(在 dbghook.c 中的#ifdef _DEBUG之外) 文件)
int _debugger_hook_dummy;
__declspec(noinline)
void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)
{
/* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */
(_Reserved);
_debugger_hook_dummy = 0;
}
调试崩溃位置( fread.c ) - 出现弹出错误窗口 (调试断言失败):
_VALIDATE_RETURN((stream != NULL), EINVAL, 0);
答案 0 :(得分:0)
在部分剪切我的源文件后,我设法调试了这个。问题不在于港口(抱歉)。
我处理可执行文件的位置时遇到了一些小问题:Visual Studio默认将它们放在SolutionDir / DebugorRelease中,而我在ProjectDir / DebugorRelease中查找它们。
但主要问题来自于功能的改变。 有一个我用来加载纹理的辅助文件,这个文件非常陈旧,使用 fopen 来打开文件。
根据我收到的警告,我将所有fopen事件更改为fopen_s ,并进行了所有必要的修改。这是程序崩溃的准确线。
我放回了 fopen version ,检查了文件位置,然后又返回执行(不是在Visual Studio中,而是仅通过命令行,就像原始项目一样)。这适用于控制台应用程序。
要使其成为Windows应用程序,以下行执行此任务,这次,虽然仅限命令行,但它适用于实际。
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )