char数组的最大大小
max size of char array?
可以分配给数组指针的字节数有最大限制吗?
例如,如果我使用16000的尺码,那么这就行了。
char* iobuffer=new char(16000);
iobuffer[15000]='a';
然而
char* iobuffer=new char(160000);
iobuffer[150000]='a';
但事实并非如此。
这不应该是内存问题,所以有一些内部限制吗?再看一看,堆可能无法存储那么多。
您的分配代码实际上是错误的。您使用的是括号,它为新分配的值提供了一个初始值设定项。换句话说,在这两种情况下,都分配了一个单个char
以供使用,分别初始化为16000
和160000
。使用括号动态分配阵列。†
之后,您将下标(way(超出界限,导致未定义的行为。(在您的情况下,任何超过零的下标都是未定义的行为;更常见的是,超过数组边界的下标都不是未定义的。(
要回答这个问题,语言是没有限制的。这取决于你的跑步环境。
†当然,您永远不应该使用new[]
。请改用std::vector
。
要回答您的问题,限制是堆上可用的最大块。它不是一个常数,即使在程序的整个执行过程中它也会发生变化。
因此,必须始终验证内存是否已分配。在每次new
之后,如果启用了空指针和catch异常,请检查结果中是否存在这些异常。
所有这些都不考虑您的代码中已经指出的错误,以及使用std::vector
而不是直接分配数组的有效建议。