gpt4 book ai didi

c++ - 如果我得到 std::bad_alloc 怎么办?

转载 作者:行者123 更新时间:2023-11-30 01:15:58 25 4
gpt4 key购买 nike

创建有机体类指针的 2d 数组:

try{
world = new Organism**[worldSizeX];

for (int x = 0; x < worldSizeX; x++){
world[x] = new Organism*[worldSizeY];

// INITATES world ARRAY
for (int y = 0; y < worldSizeY; y++){
world[x][y] = new Organism;
}
// !INITATES world ARRAY
}
}
catch (std::bad_alloc){
std::cout << "Not enough memory for World size" << worldSizeX << "x" << worldSizeY << std::endl;
deleteWorld(); // DO I NEED THIS?
init((int)worldSizeX/2, (int)worldSizeY/2, ants, beetles);
return;
}

如果我有 bad_alloc 我想用较小的 int 值调用 init。我必须 delete 失败的数组还是可以重新运行它?如果是,那么我该如何删除它,我无法遍历整个数组应用程序只是崩溃。

最佳答案

当您尝试deleteWorld 时您的程序崩溃的原因是因为您的数组没有完全初始化。因此,在此过程中您可能会遇到未初始化的指针。

为避免这种情况,零初始化您的数组:

world = new Organism**[worldSizeX]();

(注意尾随的 (),它表示数组的零初始化)。

现在,当您实现 deleteWorld 时,您将不得不跳过所有 NULL 条目。

最后:是的,当您得到 bad_alloc 时,您确实必须删除所有内容:一些对象可能已经分配,​​因此如果您在没有先解除分配的情况下进行分配,那么您将发生内存泄漏。

关于c++ - 如果我得到 std::bad_alloc 怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27588730/

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