gpt4 book ai didi

c++ - 大数组大小的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:39 24 4
gpt4 key购买 nike

以下代码在 2Gb 机器上运行时会出现段错误,但在 4GB 机器上运行。

int main()
{
int c[1000000];
cout << "done\n";
return 0;
}

数组的大小只有 4Mb。 c++中可以使用的数组大小有限制吗?

最佳答案

您可能刚刚遇到堆栈溢出。数组太大,无法放入程序的堆栈区域;在大多数主流桌面/服务器操作系统上,用户空间代码的堆栈增长限制通常为 8 MiB 或 1 MiB。 (普通的 C++ 实现使用 asm 堆栈进行自动存储,即非 static 局部变量数组。这使得在函数返回或异常通过它们传播时免费发生释放它们。)

如果你动态分配数组你应该没问题,假设你的机器有足够的内存。

int* array = new int[1000000];    // may throw std::bad_alloc

但请记住,这需要您 delete[]手动数组以避免内存泄漏,即使您的函数通过异常退出也是如此。在现代 C++ 中强烈不鼓励手动新建/删除,更喜欢 RAII .


更好的解决方案是使用 std::vector<int> array ( cppreference )。如果您知道它会增长到多大,您可以为 1000000 个元素保留空间。甚至 resize它默认构造它们(即零初始化内存,不像你声明一个没有初始化器的普通 C 风格数组),比如 std::vector<int> array(1000000)

std::vector对象超出范围,它的析构函数将为您释放存储空间,即使这是通过父函数捕获的子函数中的异常发生的。

关于c++ - 大数组大小的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28242868/

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