【问题标题】:getting stack overflow while creating byte array in Visual Studio 2010在 Visual Studio 2010 中创建字节数组时出现堆栈溢出
【发布时间】:2014-12-11 23:09:18
【问题描述】:

我创建了一个 VC++ 控制台应用程序 (HelloWorld)。我创建了一个大小为 1316779 的字节数组。它在构建应用程序时工作正常。无论如何调试它提供的应用程序

HelloWorld.exe 中 0x00969167 处的未处理异常:0xC00000FD:堆栈溢出。

但是当我将大小更改为 1010000 时,它工作正常。

我的要求是创建一个大小为 1316779 的字节数组。即 byte myArray[1316779];

我正在使用 Pentium 处理器和 2GB RAM 的 XP 操作系统下工作。

【问题讨论】:

  • 为什么不用矢量?

标签: c++ visual-studio-2010 visual-c++


【解决方案1】:

将本地数组定义为具有静态存储持续时间

static byte myArray[1316779];

否则使用标准类std::vector

【讨论】:

    【解决方案2】:

    显然,1316779 字节比堆栈大,你把它搞砸了。因此,在堆上创建 1316779 个字节并在堆栈上传递一个句柄:

    std::vector<byte> myHugeAmountofBytes;
    myHugeAmountofBytes.reserve(1316779);
    // put elemnts into myHugeAmountofBytes
    

    myHugeAmountofBytes 现在可以通过堆栈传递而不会溢出。

    【讨论】:

      【解决方案3】:

      1316779 字节 = 1.31 MB

      MSVC 默认放置一个1 MB stack limit

      /F - 如果没有此选项,堆栈大小默认为 1 MB。

      您要么需要增加该限制,要么需要减少堆栈大小(例如,使用堆分配)。我也不会依赖 1010000 (1.01)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多