写一个程序居然出现了system error,从来都没遇到过的,请大家帮小弟我看看,指点一下…

写一个程序居然出现了system error,从来都没遇到过的,请大家帮我看看,指点一下……
Sorting Again


Time Limit:   2000MS       Memory Limit:   65535KB 
Submissions:   461       Accepted:   93 

Description新春过后的第一次比赛,相信大家都已经准备好了。那么就为大家热下身吧。问题很简单,对一组输入的数据进行排序。 对输入的数据,我们有如下的约定:所有的输入数据都为正整数,且都不大于300000000。但是输入的数据可能会有重复,排序时,应将重复的数据合并,即同样的数只处理一次。

Input只有一组数据,以0结尾。

Output输出排序后的数据(不含0),其中相同的数应只显示1个。


相邻数之间有一个空格


最后是一个空格和一个换行


Sample Input

1 2 2 3 4 0

Sample Output

1 2 3 4
我的代码:
#include<stdio.h>
int a[300000001];
int main()
{
int m,max,i;
for(i=0;;i++)
{
scanf("%d",&m);
if(m==0) break;
a[m]++;
if(m>max)
max=m;
}
for(i=0;i<=max;i++)
{
if(a[i]>0)
{
printf("%d ",i);
}
}
printf("\n");
return 0;
}

------解决方案--------------------
a[m]++是干什么?是这里错了?
------解决方案--------------------
我运行了没错啊,应该和楼主的编译器有关,重装一下吧
------解决方案--------------------
int a[300000001];
用不着搞这么大吧,
我编译一下挂了,
改小点。
------解决方案--------------------
首先。。数组可能开不了那么大。。那就不能用这种方法。。要先输入所有的数。。然后排序再输出。。
如果能开这么大的数组的话,那max应该初始化。。

#include<stdio.h>
int a[300000001];
int main()
{
int m,max = 0,i;//max要初始化。。
for(i=0;;i++)
{
scanf("%d",&m);
if(m==0) break;
a[m]++;
if(m>max) max=m;
}
for(i=0;i<=max;i++)
{
if(a[i]>0)
{
printf("%d ",i);
}
}
printf("\n");
return 0;
}

------解决方案--------------------
Memory Limit:   65535KB 
------解决方案--------------------
既然不需要记录相同数据的个数,就用1个bit而不是1个int来标记某个数值是否出现过
------解决方案--------------------
引用:
Memory Limit:   65535KB 


++