一个比较简单的代码
int size;
cin<<size;
int array[size];
当我的size>1000000时,内存就会溢出,系统就不能申请了,有大佬说能够通过malloc来实现更多申请,请大佬多指点,谢谢了。
原话是咋说的?就我所知malloc单次申请也是有上限的啊,因为OS分配内存时,每个段是有长度上限的。(但是你可能会注意到,申请100MB空间后打开任务管理器,实际内存占用不见得真是100MB,可能还是很少,这不表示没有分配,而是跟OS和C Runtime的具体实现机制有关,这种现象通常是正常的,可以无视。)
当然你可以malloc多次。malloc的用法:https://linux.die.net/man/3/malloc
(使用必应搜索man malloc就能找到这个条目。C标准库里的东西都可以用类似的方式查到,也可以去cppreference查询。)
PS:你现在的写法被称为VLA(变长数组),很多人都非常不喜欢这个语法,主要是这东西的支持程度本来就变化很大。有的实现中调用了CRT,有的实现中简单移动了栈指针(是的,根本不检查这么做会不会导致栈溢出),还有的干脆不支持VLA。这东西相比于malloc最要命的地方在于,只要是内存分配就有可能失败,要是装入失败OS会解决,要是堆分配失败malloc会返回NULL,但是VLA分配失败的话根本没提供任何错误处理接口(当然,你愿意的话可以用setjmp库,但考虑到你现在写的是c++,这样做可能反而会带来危险多于方便),这是非常危险的:别说错误处理,你甚至无从知道它有没有出错(直到发生段错误或类似的事情)。