【问题标题】:C++ / Code:Blocks issue with memoryC++/代码:内存块问题
【发布时间】:2016-11-15 04:27:11
【问题描述】:

编译这段代码时出现错误:

 int i[720][720];

错误:进程返回 -1073741571 (0xC00000FD)。

我可以声明:

int i[719][719];

会发生什么?

编辑:

好吧...我确实像你说的那样。现在可以了。我试图纠正乘以大数的代码from here。

我也必须改变

        if(carry < 10){
            mat[i][j-(SIZE-1-i)]=carry;
            carry=0;
        }

到

        if(carry < 10){
            if (j-(SIZE-1-i) < 0) continue;
            mat[i][j-(SIZE-1-i)]=carry;
            carry=0;
        }

【问题讨论】:

  • 数组太大而无法放入堆栈。请改用std::vector。
  • 或new 或任何其他容器(std::array 除外,它具有相同的效果)。
  • 哦,好的...但是有没有可能增加堆栈的标准容量?我知道我只需要 [1000]x[1000] 数组。
  • 取决于编译器。
  • 增加堆栈大小可能不是正确的解决方案。如果使用其他编译器的其他人尝试编译您的代码怎么办?您应该改用std::vector 或new-allocated 数组。

标签: c++ arrays memory


【解决方案1】:

您的堆栈太小,您应该改用动态分配(例如std::vector 或new)。如果您想继续使用堆栈分配,您可以在编译器选项或命令行中增加堆栈大小(取决于您未声明的编译器)。

【讨论】:

  • “你的堆栈可能太小了” - 0xC00000FD 是堆栈溢出异常,所以这里没有可能。
【解决方案2】:

为什么要创建这种大小的数组? 为了提高内存效率,请尝试使用使用关键字new 声明的动态数组。示例:myArray = new int [10] 它们可以根据您的需要和内存效率进行扩展。

【讨论】:

  • 这是一个问题还是一个答案?
  • @Till 看起来两者都有点
【解决方案3】:

错误是您的数组太大而无法将其存储在编译器的标准堆栈空间中。您可以尝试在在线 Codechef 编译器上编译您的代码。它具有非常大的堆栈容量。链接为:https://www.codechef.com/ide

当然,您可以使用std::vector 使用向量或使用new 关键字动态分配数组(不是非常强烈推荐)。

【讨论】:

    猜你喜欢
    • 2017-04-16
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2023-03-19
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多