【问题标题】:I am trying to work with 5 Dimensional arrays with a lot of steps. I get an error: ' 'std::bad_alloc' '我正在尝试通过很多步骤使用 5 维数组。我收到一个错误:''std::bad_alloc''
【发布时间】:2019-05-24 15:40:21
【问题描述】:

我正在解决一个需要 5 维数组(动态分配)且步数至少为 1000 的问题。代码可以正常运行 50 步。同时,它给出了一个错误,即在抛出“std::bad_alloc”的实例后调用终止 什么():std::bad_alloc 中止(核心转储) ' 当步数增加时。有什么建议吗?

【问题讨论】:

  • 您似乎内存不足,如std::bad_alloc所示。
  • 感谢您的回复。是的。我确实明白了。但是,有什么出路呢?

标签: memory coredump bad-alloc


【解决方案1】:

我正要写另一条评论,但是太长了......

您要求解决 std::bad_alloc,我可以考虑两种选择:

  • 购买更多内存 ;-)
  • 停止分配这么多内存

鉴于此,但您没有提供任何代码,并且不清楚您对“步骤”的含义,我将假设“步骤”是每个一维数组的大小。

现在,考虑一个一维(标准)数组。大小为 50 的 char 数组在内存中需要 50 个连续字节。

对于二维数组,所需内存为 50^50: 2500 字节。

对于 3 维数组,所需内存为 50^3: 125 KB。

对于一个五维数组,您需要 50^5 (312500000) 个字节,大约 300 MB(不一定是连续的,因为您通常使用嵌套的 for loop 分配每个子数组)。

如果数组的长度是 1000 而不是 50,则所需的内存将是 1000^5(右侧有 15 个零的 1)字节,几乎是 PB!

这就是你内存不足的原因。

【讨论】:

    猜你喜欢
    • 2020-01-17
    • 2020-08-20
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多