动态数组的问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 06:17:37
我写程序用到一个大数组,用int a[1000000],运行是会出错,但改成
int n=1000000;int*a=new int[n]就能过了。建立的数组事实上是一样大的,但为什么一个能通过一个不能?在这里动态数组有什么好处?
我主要是想问第一个问题,盼高手解答!

静态变量的空间在栈上分配, 而malloc,new等分配的内存在堆中。
关于栈和堆的相关内容请自行查询操作系统和汇编语言方面的资料。

如果声明一个数组int a[1000000],程序会为其分配sizeof(int)*1000000的空间,在32位环境下就是约4MB,而我们的数据栈远远没有这么大,因此不能这么写。

采用动态内存分配的话,理论上可以申请无限的内存空间,即使超过宿主机的内存上限也无所谓(实际的申请上限应该是内存与外存的总和)。但是正如楼上所说,动态内存分配使用过程中有很多细节问题需要注意,其中最重要的就是不使用了立即delete,以防止内存泄漏。

一个建在栈上,一个建在堆上,能一样么?动态数组的好处就在堆很大(虚拟内存的大小),栈很小(1M数量级上,可以改)。不过申请和释放栈内存的开销要小很多。

好处就是用多少申请多少,随用随申请,new出来别忘了delete才是关键