超长数组的长度问题?请高手帮忙

beata88 2006-02-21 09:12:23
#include<conio.h>
#include<stdlib.h>
#include <time.h>
#include <dos.h>

unsigned long random2(unsigned long num) {return rand()*num/(RAND_MAX+1);}

int main(void)
{
printf("Hello, world\n");
unsigned long i,t;
unsigned long n=20000;

unsigned long* a ;
a = (unsigned long*)malloc(n*sizeof(unsigned long));
randomize();

// long n2=n;

for(i=1;i<=n;i++){
t=random2(n);
a[i]=t;
printf("\na[%ld]=%ld",i,t);
}
getch();
free(a);
return 0;
}


我运行程序后,我看数组的长度只有15493,而不是我所定义的20000。为什么?有什么解决办法,请高手支招。。谢谢
...全文
206 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
beata88 2006-02-21
  • 打赏
  • 举报
回复
是呀,我是用turbo c++ 3.0编译的。
有时候可以打印出来的长度会长点,有时短点。

我单独打印a[19999]可以把值打印出来,但是我用循环
for(i=1;i<n;i++){
printf("\na[%ld]=%ld",i,a[i]);
}
却是打不到a[19999]
而只打印到a[15493]左右..但用VC++编译后就可以了。。很奇怪。
wshcdr 2006-02-21
  • 打赏
  • 举报
回复
a = (unsigned long*)malloc(n*sizeof(unsigned long));
这样的做法居然会出问题
beata88 2006-02-21
  • 打赏
  • 举报
回复
我用VC ++运行就没有事。。应该是编译器的问题
goodluckyxl 2006-02-21
  • 打赏
  • 举报
回复
可以的 直接把你要的地址敲进去enter就可以看到了
beata88 2006-02-21
  • 打赏
  • 举报
回复
用memory是看得到呢?

可以举个例子吗?我是菜鸟,谢谢了。
goodluckyxl 2006-02-21
  • 打赏
  • 举报
回复
我运行程序后,我看数组的长度只有15493,而不是我所定义的20000。为什么?有什么解决办法,请高手支招。。谢谢
//使用memory观看 把数组地址得到 单元长度 及要观察的起始地址自己算一下就可以了
逸学堂 2006-02-21
  • 打赏
  • 举报
回复
与编译器有关,
unsigned long* a ;
a = (unsigned long*)malloc(n*sizeof(unsigned long));
lz可以定义两个长度为10000得数组。
yitianyitian 2006-02-21
  • 打赏
  • 举报
回复
这就是为什么要升级的原因
du51 2006-02-21
  • 打赏
  • 举报
回复
用GCC也没事.应该是和编译器相关吧.

69,371

社区成员

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

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