免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4901 | 回复: 26
打印 上一主题 下一主题

求助:为什么在试图读取一个超大容量数组的时候会出错? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-09 21:13 |只看该作者 |倒序浏览
最新的,修正过的帖子===============

编译环境:VC++6.0

报告各位老大:

1:我的原意只是想利用这个代码产生并访问一个1千万个元素的数组。我修正后的代码如下:
# include "stdio.h"
# include "stdlib.h"

int main() {
  int v[10000000];
  long  i;
  for (i=1; i<10000000; i++)  v [ i ]=i;
  return 0;
}
2:代码经过修正后,编译和链接都没有问题了。但是一旦运行程序,就会出错。为什么?!?!?!
3:每个int数据占4Bytes,所以1千万个元素的数组大约只需要4千万个Bytes的空间(约合38MB)。xp的系统监视器显示我的可用内存仍然有200MB左右。为什么不能正常工作呢?
4:另外,C语言中有讲过数组的长度必须控制在一个怎样的范围之内吗?或者,“超过了堆栈的长度”又有什么确凿的证据呢?

各位老大,我还是不知道我错在哪里。但是我已经把我的代码中已知的错误改过了。
另外,这个代码是有意义的。我最近在编写了一个代码后想要用很大量的一组数据进行测试,所以,我打算把这组数据放在一个1千万的数组中(数组不是很方便吗:),然后我就发现了这样一个问题:我发现似乎无论如何,我没办法访问一个超大的数组(比如这里的1千万个元素)。真糟糕,我不明白问题出在哪里,所以我就写了贴子中的代码,请教一下大家!

谁能够给我一个可以运行的代码范例?!
恳请各位师傅不吝赐教!这个问题我的确无法独立解决。
Thanks!



最早的帖子=======================
OS:Windows XP
编译环境:Visual C++ 6.0
代码:
# include "stdio.h"
# include "stdlib.h"

int main() {
  int v[10000000];
  int i;
  for (i=1; i<=10000000; i++)  v [ i ]=i;
  return 0;
}

编译链接都没有问题(No Error,No Warning)。但是,一旦运行,就会出错。
恳请能够回答问题的各位师傅能够给出尽量详细的说明。
Thanks!

[ 本帖最后由 strato 于 2005-11-12 11:40 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-11-09 21:20 |只看该作者
原帖由 strato 于 2005-11-9 21:13 发表
OS:Windows XP
编译环境:Visual C++ 6.0
代码:
# include "stdio.h"
# include "stdlib.h"

int main() {
  int v[10000000];
  int i;
  for (i=1; i<=10000000; i++)  v= ...

猜想可能是超过了所允许的堆栈的最大长度。

论坛徽章:
0
3 [报告]
发表于 2005-11-09 21:23 |只看该作者
编译链接都没有问题(No Error,No Warning)
只是没有语法错误
long int i;

论坛徽章:
0
4 [报告]
发表于 2005-11-09 21:27 |只看该作者
晕倒,这么个明显的错误,我硬是没看出来,太掉以轻心了!

论坛徽章:
0
5 [报告]
发表于 2005-11-10 18:03 |只看该作者

问题仍然没有得到解决!

# include "stdio.h"
# include "stdlib.h"

int main() {
  int v[10000000];
  long int i;
  for (i=1; i<=10000000; i++)  v [ i ] =i;
  return 0;
}

在VC++6.0中,编译时出现如下错误:
Compiling...main.cpp
e:workdatastructure        est1main.cpp(7) : error C2440: '=' : cannot convert from 'long' to 'int [10000000]'
        There are no conversions to array types, although there are conversions to references or pointers to arrays
Error executing cl.exe.

test1.exe - 1 error(s), 0 warning(s)
有没有哪位师傅可以把代码写出来给我参考一下啊?Thanks!

[ 本帖最后由 strato 于 2005-11-11 13:29 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2005-11-10 18:20 |只看该作者
LZ,麻烦你仔细检查一下程序
可以 v=i?v是指针呀!

论坛徽章:
0
7 [报告]
发表于 2005-11-10 18:25 |只看该作者
估计是他错了 指针怎么能?
v[i] = i;

论坛徽章:
0
8 [报告]
发表于 2005-11-10 23:38 |只看该作者
int v[10000000];??!
怎么能在stack上分配这么大的空间呢?

论坛徽章:
0
9 [报告]
发表于 2005-11-11 13:23 |只看该作者

报告

编译环境:VC++6.0
报告各位老大:
1:原来那个代码的确是我写错了,我的原意只是想利用这个代码产生并访问一个1千万个元素的数组。我修正后的代码如下:
# include "stdio.h"
# include "stdlib.h"

int main() {
  int v[10000000];
  long  i;
  for (i=1; i<10000000; i++)  v [ i ]=i;
  return 0;
}
2:代码经过修正后,编译和链接都没有问题了。但是一旦运行程序,就会出错。为什么?!?!?!
3:每个int数据占4Bytes,所以1千万个元素的数组大约只需要4千万个Bytes的空间(约合38MB)。xp的系统监视器显示我的可用内存仍然有200MB左右。为什么不能正常工作呢?另外,C语言中有讲过数组的长度必须控制在一个怎样的范围之内吗?或者,“超过了堆栈的长度”又有什么确凿的证据呢?

恳请各位师傅不吝赐教!这个问题我的确无法独立解决。
Thanks!

[ 本帖最后由 strato 于 2005-11-12 11:01 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2005-11-11 13:32 |只看该作者
原帖由 kj501 于 2005-11-10 23:38 发表
int v[10000000];??!
怎么能在stack上分配这么大的空间呢?


好像不是stack 吧!代码区吧,代码区的管理是sys的问题,分配多大我也不知道
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP