char数组的最大大小?

时间:2011-04-08 00:54:01

标签: c++ arrays

是否可以为数组指针分配的字节数有最大限制?

例如,如果我使用16000的大小,那么这是有效的。

char* iobuffer=new char(16000);
iobuffer[15000]='a';

然而

char* iobuffer=new char(160000);
iobuffer[150000]='a';

这不是。

它不应该是内存问题,所以有一些内部限制吗?在进一步研究之后,堆可能无法存储那么多。

2 个答案:

答案 0 :(得分:10)

你的分配代码确实错了。您正在使用括号,它为您新分配的值提供初始值设定项。换句话说,在这两种情况下,您都分配了 char,分别初始化为16000160000。使用括号动态分配数组。†

之后,您下标( way )越界,导致undefined behavior。 (在您的情况下,任何过零的下标都是未定义的行为;更一般地说,下标过去的数组边界是未定义的行为。)

要回答这个问题,语言没有限制。这取决于您的运行环境。


†当然,你永远不应该使用new[]。请改用std::vector

答案 1 :(得分:0)

要回答您的问题,限制是堆上可用的最大块。它不是一个常数,即使在程序执行期间它也会发生变化。

这就是为什么,必须始终验证内存是否已分配。在每个new之后检查空指针的结果并捕获异常(如果已启用)。

所有这些都不管代码中已经指出的错误,以及使用std::vector而不是直接分配数组的有效建议。