gpt4 book ai didi

c++ - 循环中简单使用动态内存导致bad_alloc

转载 作者:太空狗 更新时间:2023-10-29 20:12:26 25 4
gpt4 key购买 nike

假设我有一个像这样的非常简单的循环:

#include <iostream>

int main() {
int i = 0;
while (1)
{
char* c = new char[32];

std::cout << i << " " << c[0] << std::endl;

delete[] c;
i++;
}
return 0;
}

正如您在循环开始时看到的,我使用 new 运算符分配了一些内存。我把它打印出来然后删除。如果我运行这段代码,它会工作,但有一次它会停止并抛出 std::bad_alloc。

我不明白为什么会这样。它不应该耗尽内存,因为它每次使用删除都会释放内存。如果有足够的内存供程序执行一次或两次循环,那么它应该有足够的内存供它无限循环。而且只有 32 个字节。

我试图在两台不同的计算机上运行它,每台计算机在它中断之前执行不同数量的循环。

我做错了什么吗?

编辑: 我在 Windows 8 上使用 mingw g++ (gcc) 4.8.1

最佳答案

我想出了问题所在。我正在使用 Microsoft Application Verifier 进行某些操作,但不小心留下了选择用于测试的 exe。由于启用了低资源模拟测试,它模拟了低内存条件。

我没有意识到验证器即使在窗口关闭时也能正常工作。当我尝试使用不同的参数编译程序并意外更改输出文件名时,我认为可能是它。更改文件名使程序运行,所以我记得我之前将验证程序指向原始 exe。

我现在觉得很傻。

关于c++ - 循环中简单使用动态内存导致bad_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27679068/

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