数组最多容纳多少元素?为什么我定义一个40W个元素的数组之后运行不成功?

leveldd 2012-09-09 10:42:20
VC6.0中数组最多容纳多少元素?为什么我定义一个40W个元素的数组之后运行不成功?
程序如下
#include <stdio.h>
void main()
{
long int n,i,j,s;
long int array[40000];
scanf("%ld",&n);
for(i=0;i<n;i++) scanf("%ld",&array[i]);
for (i=0;i<n;i++)
{
s=0;
for (j=0;j<n;j++)
{
if(array[i]==array[j]) s=s+1;
}
if(s>n/2)
{
printf("%ld\n",array[i]);break;
}
for(;i==(n-1);)
{printf("0\n");break;}
}
}

当数组元素为4W时运行正常,改为40W后就无法运行,为什么?long可以容纳呀..
求指教~谢谢~
...全文
1795 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
northcan 2012-09-15
  • 打赏
  • 举报
回复
编译器会有设置默认栈大小的地方,不能超过那个默认值。

这么大的数组,直接new/malloc在堆上吧,用完释放。
leveldd 2012-09-15
  • 打赏
  • 举报
回复
QAQ菜鸟一只 神马不会 求指教~
[Quote=引用 6 楼 的回复:]

引用 3 楼 的回复:

怎样在堆上分配?引用 2 楼 的回复:

栈是有一定大小的,在栈上不能分配非常大的数组,比如超过1M或4M。

请在堆上分配。

C用malloc,C++还可以用new。
[/Quote]
mymtom 2012-09-14
  • 打赏
  • 举报
回复
这个与栈的大小有关,VC6 缺省的栈为1M, 可以在工程属性里修改。
赵4老师 2012-09-14
  • 打赏
  • 举报
回复
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。
xiaohuh421 2012-09-13
  • 打赏
  • 举报
回复
我写程序最怕栈不够用了, 所以只要超过1K的内存需求,我都使用new动态申请,当然如果是很频繁使用的函数, 就在外面new一个buf一直使用它, 避免内存碎片.
晚安_好梦 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
40W个int=160W字节=1.52GB~~直接栈溢出了
[/Quote]

160w字节 = 1600 000B = 1562.5K = 1.52587M。

不是1.52GB,大哥。
Athenacle_ 2012-09-10
  • 打赏
  • 举报
回复
40W个int=160W字节=1.52GB~~直接栈溢出了
Gloveing 2012-09-10
  • 打赏
  • 举报
回复
对于小的数组,直接就在栈上创建
对于这种大数组,就最好在堆上,动态创建(new/malloc),一般来说,堆上可以申请的空间足够满足你
wizard_tiger 2012-09-10
  • 打赏
  • 举报
回复
这么大的数组直接溢出了。
AnYidan 2012-09-10
  • 打赏
  • 举报
回复
资源永远是有限的!
赵4老师 2012-09-10
  • 打赏
  • 举报
回复
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。
hnzmdzcm 2012-09-09
  • 打赏
  • 举报
回复
栈溢出
SKATE11 2012-09-09
  • 打赏
  • 举报
回复
那要看剩余的栈空间有多大 能不能容下你的数据
zjs100901 2012-09-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

怎样在堆上分配?引用 2 楼 的回复:

栈是有一定大小的,在栈上不能分配非常大的数组,比如超过1M或4M。

请在堆上分配。

[/Quote]
C用malloc,C++还可以用new。
leveldd 2012-09-09
  • 打赏
  • 举报
回复
为什么不建议呢?那该怎么做才好?[Quote=引用 1 楼 的回复:]

数组能定多大取决于“栈”,VC6默认栈是1MB,可通过连接器选项/stack调节

不过通常不推荐在栈中开辟过大的数组
[/Quote]
Ammia_Tian 2012-09-09
  • 打赏
  • 举报
回复
栈溢出
leveldd 2012-09-09
  • 打赏
  • 举报
回复
怎样在堆上分配?[Quote=引用 2 楼 的回复:]

栈是有一定大小的,在栈上不能分配非常大的数组,比如超过1M或4M。

请在堆上分配。
[/Quote]
zjs100901 2012-09-09
  • 打赏
  • 举报
回复
栈是有一定大小的,在栈上不能分配非常大的数组,比如超过1M或4M。

请在堆上分配。
jackyjkchen 2012-09-09
  • 打赏
  • 举报
回复
数组能定多大取决于“栈”,VC6默认栈是1MB,可通过连接器选项/stack调节

不过通常不推荐在栈中开辟过大的数组

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧