免费注册 查看新帖 |

Chinaunix

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

申请动态大型数组问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-28 20:26 |只看该作者 |倒序浏览
想申请一个 char temp[1500000][50]
申请不了
用动态申请也不行


  1.         char **temp;
  2.         long r,c;

  3.         temp=(char **)malloc(1500000*sizeof(char*));
  4.         for(r=0;r<1500000;r++)
  5.                 temp[r]=(char*)malloc(50*sizeof(char));
  6.         for(r=0;r<1500000; r++)   
  7.         {   
  8.                 free(temp[r]);   
  9.         }   
  10.         free(temp);  


复制代码



单独编译可以通过

可能是 qsort() 函数不接受 1500000 长的数组

之前的程序中有个lib 函数
qsort(temp,1500000,sizeof(char)*50,comp);

高手指点一下

[ 本帖最后由 daiyihang 于 2007-3-28 20:53 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-03-28 20:33 |只看该作者
即使能够分配也需要很长时间吧?
难道真的需要那么大的内存空间么?

关注这个帖子,嘿嘿。看看怎么处理此类问题的

我怎么成了一楼了?刚才那个一楼的帖子怎么神秘失踪了?

论坛徽章:
0
3 [报告]
发表于 2007-03-28 20:35 |只看该作者
.

这么贪心?

你知道 1500000*(50+sizeof(char *)) 是多大吗?快有 78 兆了(Intel 80386 兼容)。

并且你实际只需要用 calloc() 来完成这个任务。

.

论坛徽章:
0
4 [报告]
发表于 2007-03-28 20:38 |只看该作者

回复 2楼 janusle 的帖子

.

你是 2 楼。请注意楼层之间是有楼板的。双线是楼板,单线不作为楼层分割标志。

.

论坛徽章:
0
5 [报告]
发表于 2007-03-28 20:44 |只看该作者
才知道原来不是从0开始计数的^_^

论坛徽章:
0
6 [报告]
发表于 2007-03-28 20:58 |只看该作者
原帖由 janusle 于 2007-3-28 20:44 发表
才知道原来不是从0开始计数的^_^


如果你注意观察,就会发现 CU Linux 早已进行了改版,强化和突显了楼层之间的分割,有立体的效果。

.

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
7 [报告]
发表于 2007-03-28 21:09 |只看该作者
这么长的数组最好不要用QSort。楼主应应该知道QSORT是递归算法。对堆栈的需求相当大。

论坛徽章:
0
8 [报告]
发表于 2007-03-28 21:14 |只看该作者
.

可能要用外部排序法了。Quicksort 属于内部排序法,一般用递归实现,所以正如楼上所述,对堆栈的要求很大。

External Sorting--This term is used to refer to sorting methods that are employed when the data to be sorted is too large to fit in primary memory.


http://www.cs.utk.edu/~huangj/CS ... ernal-sorting2.html

.

论坛徽章:
0
9 [报告]
发表于 2007-03-28 22:28 |只看该作者

其实很简单

定义局部变量  char temp[1500000][50]  不行的原因是线程的默认栈大小是1M.定义这么大的局部变量就Stack Overflow了.

动态申请其实很简单.
pPtr = (char *)malloc(1500000 * 50) 即可.

论坛徽章:
0
10 [报告]
发表于 2007-03-28 22:32 |只看该作者
Quicksort如果用栈会耗费多大的内存?
我看过一个用goto实现的,应该不算是递归,我不知道libc是怎么实现的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP