char数组的最大大小

max size of char array?

本文关键字:数组 char      更新时间:2023-10-16

可以分配给数组指针的字节数有最大限制吗?

例如,如果我使用16000的尺码,那么这就行了。

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

然而

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

但事实并非如此。

这不应该是内存问题,所以有一些内部限制吗?再看一看,堆可能无法存储那么多。

您的分配代码实际上是错误的。您使用的是括号,它为新分配的值提供了一个初始值设定项。换句话说,在这两种情况下,都分配了一个单个char以供使用,分别初始化为16000160000。使用括号动态分配阵列。†

之后,您将下标(way(超出界限,导致未定义的行为。(在您的情况下,任何超过零的下标都是未定义的行为;更常见的是,超过数组边界的下标都不是未定义的。(

要回答这个问题,语言是没有限制的。这取决于你的跑步环境。


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

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

因此,必须始终验证内存是否已分配。在每次new之后,如果启用了空指针和catch异常,请检查结果中是否存在这些异常。

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