gpt4 book ai didi

c++ - 由于未知原因,在 void 函数中创建(大)对象失败

转载 作者:行者123 更新时间:2023-11-28 06:42:58 25 4
gpt4 key购买 nike

一段时间以来,我一直对我的程序在某些对象分配方面的行为感到困惑。

我的 main()函数运行如下:

const int numOpts = 3;
string opts[numOpts] = { "Play", "Settings", "Quit" };
// 0 1 2
for (;;)
{
int choice = input(numOpts); // returns 0, 1, or 2
if (choice == 0)
{
Game b; // 9
b.start(); // 10
}
else if (choice == 1)
settings(); // edits global variables
else
break;
}

但是,当我尝试将第 9 行和第 10 行 ( Game b; b.start(); ) 放在它们自己的 void 中时功能,

static void startGame();

int main()
{
...
if (choice == 0)
startGame();
...
}

static void startGame()
{
Game b;
b.start();
}

程序在 for (;;) 的一次迭代后很快崩溃(段错误)环形。在 Xcode 中,main()在调用 startGame() 之后似乎忘记了它的所有变量.同样,

static void startGame()
{
Game* b = new Game;
b->start();
delete b;
}

也失败了:但不是在我自己的操作系统 (OS X) 上,而是在 Linux 机器上。失败的输出如下所示:*** glibc detected *** ./Game: free(): invalid next size (fast): 0x0000000001b41d60 *** ... .

这些问题是否相关?我怀疑 main() 的堆栈数据以某种方式被释放,但如果是这样,为什么第一个实现有效,但接下来的两个呢?

最佳答案

看起来您的 Game 类写入了不受其控制的内存,从而破坏了堆或堆栈,具体取决于您分配它的位置。在“游戏”中查找缓冲区溢出。

关于c++ - 由于未知原因,在 void 函数中创建(大)对象失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25588035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com