z1095582370 2021-01-18 20:08 采纳率: 0%
浏览 439

(0xc0000142) 'DLL Initialization Failed'

有没有大神指点一下,为什么我加上递归main函数之后就会跳出来:程序无法正常启动,返回值为 -1073741502 (0xc0000142) 

其实加上了之后,该运行还是能正常运行的,但只要gameover了输入1重来就会跳这个error,甚至VS再进行调试的时候也会直接弹出这个error,但直接去folder里运行exe是可以的

int main(void)
{
	unsigned k = 0;
	system("cls");
	puts("这是一个贪吃蛇的游戏!");
	if (buffer) Buffer();
	Sleep(2000);
	start(arr);
	system("cls");
	do {
		if (kbhit()) {//输入后能加速//
			direct();
			moveSnake(arr);
			print(arr);
		}
		if (k++ % speed == 0) {
			moveSnake(arr);
			print(arr);
		}//这个是不输入的时候正常行走速度//
		Sleep(40);//必须设一个让人家有反应时间//
	} while (!gameover);
	if (_getch() == '1')main();
	return 0;
}

 

 

  • 写回答

2条回答 默认 最新

  • 你知我知皆知 2024-07-24 15:25
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由游戏逻辑引起的。在你的main()函数中,你有两个循环:一个是do {...},另一个是while (!gameover)

    do {...}是一个无限循环,这意味着它会一直执行下去直到!gameover变为false。在这个过程中,你可能会遇到0xc0000142错误。

    gameover变为true时,程序将结束,并且main()函数中的所有其他循环都会被终止。因此,当你按下回车键('\n')时,你可以看到main()函数继续执行并打印“这是一个贪吃蛇的游戏!”。

    如果你想要解决这个问题,你需要修改main()函数以避免无限循环。例如:

    int main(void)
    {
        unsigned k = 0;
        system("cls");
        puts("这是一个贪吃蛇的游戏!");
        if (buffer) Buffer();
        Sleep(2000);
        start(arr);
        do {
            // ...你的游戏逻辑...
            if (kbhit()) {//输入后能加速//
                direct();
                moveSnake(arr);
                print(arr);
            }
            if (k++ % speed == 0) {
                moveSnake(arr);
                print(arr);
            } else { //这个是不输入的时候正常行走速度//
                moveSnake(arr);
                print(arr);
            }
            Sleep(40); //必须设一个让人家有反应时间//
        } while (!gameover);
        if (_getch() == '1') main(); //这里可以添加额外的处理,比如退出游戏等。
        return 0;
    }
    

    现在,当你按下回车键时,程序会停止并打印提示信息,而不是进入无限循环。

    评论

报告相同问题?