是否可以为数组指针分配的字节数有最大限制?
例如,如果我使用16000的大小,那么这是有效的。
char* iobuffer=new char(16000);
iobuffer[15000]='a';
然而
char* iobuffer=new char(160000);
iobuffer[150000]='a';
这不是。
它不应该是内存问题,所以有一些内部限制吗?在进一步研究之后,堆可能无法存储那么多。
答案 0 :(得分:10)
你的分配代码确实错了。您正在使用括号,它为您新分配的值提供初始值设定项。换句话说,在这两种情况下,您都分配了单 char
,分别初始化为16000
和160000
。使用括号动态分配数组。†
之后,您下标( way )越界,导致undefined behavior。 (在您的情况下,任何过零的下标都是未定义的行为;更一般地说,下标过去的数组边界是未定义的行为。)
要回答这个问题,语言没有限制。这取决于您的运行环境。
†当然,你永远不应该使用new[]
。请改用std::vector
。
答案 1 :(得分:0)
要回答您的问题,限制是堆上可用的最大块。它不是一个常数,即使在程序执行期间它也会发生变化。
这就是为什么,必须始终验证内存是否已分配。在每个new
之后检查空指针的结果并捕获异常(如果已启用)。
所有这些都不管代码中已经指出的错误,以及使用std::vector
而不是直接分配数组的有效建议。