【问题标题】:Is there way to increase memory of an array? and Related issue [duplicate]有没有办法增加数组的内存?和相关问题[重复]
【发布时间】:2016-12-07 15:33:24
【问题描述】:

简单的问题: 我的代码块能够编译下面的代码并且运行良好:

int a[2000000];

我的代码块能够编译下面的代码但我的程序在之后立即崩溃:

int a[2000000];
int b[2000000];

1) 原因是什么?为什么? (我的 ram 16 GB !!而这只花了 0.3MB 那么有什么问题?)

2) 如何修复或使用替代方式? (但我需要创建这么多的数组)

3) 有没有办法增加数组的内存?


相关问题(我是这么认为的):

我的代码块能够编译下面的代码并且运行良好:

unsigned long int a=100000000000;

我的代码块能够编译下面的代码但是我的程序在我输入相同的数字(100000000000)后立即崩溃

unsigned long int a;
 cin>>a;

怎么办?

【问题讨论】:

  • 可能是堆栈溢出。一般来说,忘记数组并使用std::vector 或其他标准容器。
  • 我认为任何 c++ 初学者都不需要声明一个大小为 2000000 的数组
  • 您真的需要这么多的自动存储吗?如果这样做,则必须增加堆栈限制。
  • 我对欺骗关闭的问题是它是一个 C 问题。已接受答案中的补救措施提供了在 C++ 中不是最佳实践/推荐的建议。
  • @NathanOliver:好点。我没有注意到这一点。这个会更好吗? stackoverflow.com/q/9016538/10077

标签: c++ windows


【解决方案1】:
int a[2000000];

这超出了您的堆栈限制。您可以改用std::vector<int> a(2000000);,它将使用动态存储分配(理论上是无限的)。

【讨论】:

  • 但问题是我对矢量知之甚少!但无论如何我可以只使用数组来解决这个问题!
  • @Aravind.KEN 现在是开始阅读它们的好时机!
  • @Aravind.KEN,如果需要,您可以使用动态数组。
  • @MarcoA 为您提供了 MSVC 文档如何做到这一点。
  • @Aravind.KEN 这是你的筹码限制老兄!
【解决方案2】:

编译的可执行文件有堆栈限制

(MSVC docs)

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

您的代码溢出堆栈空间

int a[2000000];

堆栈是一种宝贵的有限资源,如果您需要分配大量内存,请考虑在堆中进行。

参照。 What and where are the stack and heap?

【讨论】:

  • 但是堆内存处理很危险吧!?
  • @Aravind.KEN 这就是为什么你应该使用std::vector。它很安全,可以解决您的问题。
  • @NathanOliver 明白先生!任何不错的网站都可以了解它!我已经添加了额外的问题!请尝试回答!
猜你喜欢
  • 2019-10-03
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多