【发布时间】:2021-11-22 10:45:03
【问题描述】:
我创建了一个函数,它在堆栈 (C++) 上分配一个太大的数组。运行结果出现此错误:
Unhandled exception at 0x000000013F4DEBF7 in xxx.exe: 0xC00000FD: Stack overflow (parameters: 0x0000000000000001, 0x0000000000043000).
我从未见过分配给堆栈溢出错误的特定实例的“参数”部分,而且我在 Internet 上的搜索没有结果。有谁知道这些参数是什么意思?我观察到,对于相同代码的多次运行,第一个参数保持不变,第二个参数发生变化,但保持在 6-5 位范围内。我很好奇他们的意思。
如果重要,这里有一个 MRE:
constexpr uint8_t LOG_2_OF_BUCKET_COUNT = 20;
int main(){
uint32_t histogram[1 << LOG_2_OF_BUCKET_COUNT];
return 0;
}
【问题讨论】:
-
@Nate:这是一个操作系统“结构化异常”,结构化异常详细信息不依赖于工具链(构建或运行时)。只是操作系统。
-
您的数组大约 4MB,对于堆栈来说可能太大了。试试
std::vector<uint32_t> histogram(1 << LOG_2_OF_BUCKET_COUNT); -
@churill 别担心,问题不在于我应该如何修复我的代码。只是参数,我会处理其余的。不过感谢您的努力。
标签: c++ windows visual-c++ runtime-error stack-overflow