【问题标题】:Maximum size of array of structs结构数组的最大大小
【发布时间】:2015-11-26 22:38:33
【问题描述】:

我尝试制作结构数组。结构包含两个二维数组 (100x100)。如果我想制作 30 个或更多结构的数组,则会发生错误 - “分段错误”。我正在使用带有 MINGW 编译器的 CodeBlocks。 代码:

struct gracze
{
    int pole1[100][100];
    int pole2[100][100];
};


int main()
{
    gracze gracz[30];

return 0;
}

【问题讨论】:

  • 这个标题很可能与问题无关。您需要显示您的代码。您还应该使用调试器来获取回溯。
  • 如果您的所有源代码包含的是结构的定义和带有数组的main(),是否会发生这种情况?如果是,请向我们展示代码。如果没有,为什么不
  • 一般来说,指针和数组的大小限制是特定于环境的(64 位 vs 32 位),与 C++ 本身关系不大。
  • 你的堆栈限制是多少?您的结构大约需要 4 * 100 * 100 * 2 * 30 = 2 400 000 - 2 MB。您是否将堆栈大小设置为低于此值?
  • 我没有更改堆栈限制

标签: c++ arrays struct mingw


【解决方案1】:

您分配了大约 2.4 到 4.8 兆字节的堆栈空间。

IIRC,MinGW 的默认堆栈大小约为 2 MB,即您超出了堆栈空间,需要增加它 - 如果您确实想要使用如此大的堆栈分配而不是例如动态分配内存:

#include <stdlib.h>

int main()
{
    gracze * gracz;
    if ( ( gracz = malloc( sizeof( gracze ) * 30 ) ) != NULL )
    {
        // stuff
        free( gracze );
    }
    return 0;
}

如果这不是您想要的,this SO question 将介绍增加堆栈空间的“方法” (gcc -Wl,--stack,&lt;size&gt;)。

在 Linux 上,还有ulimit -s 设置的全局限制。

This SuperUser question 涵盖 Windows / VisualStudio (editbin /STACK:reserve[,commit] program.exe)。

【讨论】:

  • 我使用了这个解决方案,一切正常。谢谢
【解决方案2】:

您正在堆栈上进行大量分配。要么增加堆栈大小,要么以其他方式分配对象(静态或 malloc)。

DevC++ (Mingw) Stack Limit

【讨论】:

    猜你喜欢
    • 2011-02-08
    • 1970-01-01
    • 2013-01-18
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2011-11-07
    • 2012-04-06
    相关资源
    最近更新 更多