| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2783 人关注过本帖
标题:txt文件中读取一个4000*4000的二维数组
只看楼主 加入收藏
margare_wang
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-8-31
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
txt文件中读取一个4000*4000的二维数组
我想从txt文件中读取一个4000*4000的二维数组,用fopen,fscand这些函数编译和链接都能通过,但是一运行就提示溢出,请高手帮忙,如果这种方法本身不能,请问可以用什么别的方法,感激不尽
define nodes  4000
#define CDOOR   100
#define maxint  10000
int main()
{
 clock_t start,end;
 start = clock();
 int i,j;
 int l=0;
 FILE *fd;
 int  d[nodes][nodes];
 fd=fopen("cost.txt","r");
 if (fd==NULL)
 {
  printf("读取文件失败");
  system("pause");
  exit(0);
 }
 else
 {
  for(j = 0 ; j < nodes ;j++)
  {
   for(i = 0 ; i < nodes; i++)
   {
    fscanf(fd,"%d",&d[i][j]);   
    if ((d[i][j]<CDOOR)&&(i<j))
    {
     l=l+1;
    }
   }
  }
  fclose(fd);
 }
 printf ("满足阈值限制的总数l=%d\n",l);
 end = clock();
 double TIM = (double)(end - start)/CLK_TCK;
 cout<<"总耗时:"<<TIM<<endl;
 return l;
}
上面这个是其中的一个操作些的代码,这个程序就跑不起来,一运行就溢出了,不知道是什么原因????

有人提示我说是不能直接定义这么大的数组,那位高手知道一下怎么定义动态数组。。。

搜索更多相关主题的帖子: txt 文件 
2010-09-04 14:38
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:6 
直接把文件映射到内存中,不用fopen方式读取 效率很高的  你这样效率不是很高
2010-09-04 14:50
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:6 
回复 2楼 kingsroot
请教怎么个映射法?

我就是真命天子,顺我者生,逆我者死!
2010-09-04 14:57
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
int  d[nodes][nodes];
这个拖到最上面去就行了,

我就是真命天子,顺我者生,逆我者死!
2010-09-04 15:04
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
4000*4000*4/1024 = 62500KB, 超出了栈的的限制了

我就是真命天子,顺我者生,逆我者死!
2010-09-04 15:07
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
mmap把文件映射到用户空间的内存,直接从头读 就行老
2010-09-04 18:39
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
收藏
得分:6 
把数组定义成本地变量有空间限制, 可以用指针加内存分配来做:
const int MAX = 4000;
int *a[MAX], i;
for(i=0;i<MAX;i++)
{
  a[i] = (int*)::malloc(MAX*sizeof(int));
}
if(i==MAX) // 分配成功
for(i--;i>=0;i--)
{
  ::free(a[i]);
}
2010-09-04 19:14
快速回复:txt文件中读取一个4000*4000的二维数组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024729 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved