【问题标题】:Max_Int reached before the limit defined in climits.hMax_Int 在 climits.h 中定义的限制之前达到
【发布时间】:2012-08-12 06:55:08
【问题描述】:

我收到这个错误

每当我在使用 Microsoft Visual C++ 2010 Express 编译的代码中输入任何大于以下数字的数字时:

int size = 276447232;

不过,按照thisconversationthis onethatone,我应该可以在遇到任何问题之前上到2147483646,不是吗?

天空

【问题讨论】:

  • 我认为赋值不会导致abort() .. 变量/值是如何使用的?也就是说,是否有不同的行实际触发了“调试错误!”?
  • 嗨 pst,抱歉耽搁了。事实上,我在下一行使用了这个sizechar *outputGwb=new char[size];。但问题是这个错误只有在我更改size参数时才会出现...

标签: max limits


【解决方案1】:

程序试图分配太多的堆栈空间:

char *outputGwb = char[size]; // array is created "on the stack"

使用malloc(或C++ 中的new)从分配内存。确保稍后free(或C++ 中的delete)内存;只是不要混合分配/解除分配策略。

char* outputGwb = new char[size]; // C++: note use of the "new" keyword
char* outputGwb = malloc(size);   // C:   note no cast needed in a C compiler

因此,此问题与特定资源的最大大小有关,并且与整数值可以表示的最大数量有关。

请参阅What and where are the stack and heap? 了解两个内存分配区域之间的说明。另外,虽然我不一定会推荐它,但这里有一个thread that discusses how to change the stack size in Visual C++

【讨论】:

  • 确实,我忘了在代码后面提到我delete内存。不过,我并没有完全理解它所做的改变:在堆栈上从堆中有什么区别?
  • @RobinLen'hog 删除(或免费)不是新的(或 malloc 的)的东西是非常糟糕的 :) 我已经更新了帖子,其中包含一个关于堆栈的问题的链接vs heap 并添加了 C 和 C++ 中的堆分配示例。
  • 非常感谢。为了比我以前在这篇文章中更清楚,我的程序中有 3 行代码:int size = 276447232;char *outputGwb=new char[size];delete [] outputGwb;,其余代码在 newdelete 之间线。我要看看链接和示例,再次感谢
  • 在浏览了你给我的链接后,我知道我已经要求分配从堆(我已经使用new,这就是为什么我@987654336 @ 在我的代码末尾)。但是当我回到你的答案时,我现在读到你认为我“分配了太多 stack 空间”。 stack space 是否与分配 从堆 直接相关,还是我遗漏了什么?再次感谢
  • @RobinLen'hog 我错过了.. 我以为我看到它没有new。无论如何,这似乎是一个失败的分配,尽管 ~280MB 并不是“那么大”。
猜你喜欢
  • 2018-04-06
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2017-08-17
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多