大婶们帮忙看看这个段错误,生成0到n之间的k个不重复随机数

javaadu
博客专家认证
2013-10-31 08:23:25
/**
* 生成1000 0000个[100 0000, 999 9999]之间的不重复的数
* */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

unsigned bigrand();
unsigned randint(int l, int u);
void swap(int *a,int *b);

int main(int argc,char* argv[])
{
int num[10000000];
int i;
FILE *fp = fopen("rand_num_file.txt","a+");
if(fp == NULL)
{
printf("cannot open this file!\n");
exit(0);
}
srand((unsigned)time(NULL));

for(i=0; i<10000000; i++)
num[i] = i;
for(i=0; i<1000000; i++)
{
swap(&num[i],&num[randint(1000000,10000000-1)]);
fprintf(fp,"%d\n",num[i]);
}
fclose(fp);
return 0;
}

/*
* 生成大随机数(30位)
**/
unsigned int bigrand()
{
return rand()*RAND_MAX + rand();
}

/*
* 生成[l,m]之间的随机数
**/
unsigned int randint(int l, int u)
{
return l + bigrand() % (u-l+1);
}

//交换
void swap(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
...全文
75 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaadu 2013-10-31
  • 打赏
  • 举报
回复
您说的对,我把它改成全局变量后就可以了,谢谢您
还有多远 2013-10-31
  • 打赏
  • 举报
回复
引用 楼主 duqi_2009 的回复:
/** * 生成1000 0000个[100 0000, 999 9999]之间的不重复的数 * */ #include <stdio.h> #include <stdlib.h> #include <time.h> unsigned bigrand(); unsigned randint(int l, int u); void swap(int *a,int *b); int main(int argc,char* argv[]) { int num[10000000]; int i; FILE *fp = fopen("rand_num_file.txt","a+"); if(fp == NULL) { printf("cannot open this file!\n"); exit(0); } srand((unsigned)time(NULL)); for(i=0; i<10000000; i++) num[i] = i; for(i=0; i<1000000; i++) { swap(&num[i],&num[randint(1000000,10000000-1)]); fprintf(fp,"%d\n",num[i]); } fclose(fp); return 0; } /* * 生成大随机数(30位) **/ unsigned int bigrand() { return rand()*RAND_MAX + rand(); } /* * 生成[l,m]之间的随机数 **/ unsigned int randint(int l, int u) { return l + bigrand() % (u-l+1); } //交换 void swap(int *a,int *b) { int temp = *a; *a = *b; *b = temp; }
骚年,int num[10000000];这个数组就40M字节了,这样的局部变量定义在栈里,栈岂能吃得消,定义成全局的或静态的把

69,371

社区成员

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

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