gpt4 book ai didi

c++ - 使用 vector 时堆栈溢出

转载 作者:行者123 更新时间:2023-11-28 00:23:01 25 4
gpt4 key购买 nike

我为学校的小竞赛制作了一个程序,我有:

#include <iostream>
#include <vector>

int main(){
int n;
std::cin >> n;
int c[n];
std::vector<int> r(n);
std::cout << "I made it through";
//rest of program
}

当我输入 1000000 并按下回车键时,程序一言不发地崩溃,退出代码 (0xC00000FD)。我假设它发生在我初始化 vector 时,但我认为它可以处理更多。难道我做错了什么?我知道我可以使用指针,但我不想触摸已经工作的东西。

最佳答案

堆栈是一种非常受限的资源。

即使您的编译器似乎在 C++ 中实现了 C 风格的 VLA (int c[n];),它也不会神奇地获得更多内存。

测试 1) 成功读取 n,以及 2) n 在执行分配该堆栈数组的语句之前不超出您的使用范围。

Windows 的默认堆栈大小:1MB sizeof(int):4 因此,大约适合 250000。
Linux 的默认堆栈大小:8MB sizeof(int):4 因此,大约 2000000 适合。

解决方法:对 int 使用动态分配,就像使用 std::vector 一样:

std::vector<int> c(n);

或者,至少使用智能指针:

std::unique_ptr<int[]> c(new int[n]);

关于c++ - 使用 vector 时堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26538590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com