| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1122 人关注过本帖
标题:存储空间问题,求大神解答一下!!!
只看楼主 加入收藏
katail
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-10-4
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
存储空间问题,求大神解答一下!!!
麻烦各位帮解答一下,谢谢啦!!!
    在用二维数组指针存储数据时,给二维数组指针分配存储空间时,一维的大小和二维的大小就有限制啦,如下测试程序
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int i,j;
        double **a=(double **)malloc(39000*sizeof(double*));
        for(i=0;i<39000;i++)
            a[i]=(double *)malloc(6000*sizeof(double));
        for(i=0;i<39000;i++)
            for(j=0;j<6000;j++)
                a[i][j]=0;
        system("pause");
        for(i=0;i<39000;i++)
            free(a[i]);
        free(a);
        return;
    }
    当把二维的6000改为7000时就会出现“aa.exe 中的 0x01241479 处有未经处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突”。
    但要创建39000×39000的二维数组大小时,怎么处理,这里malloc分配空间不够,请问各位有什么好的解决办法嘛?有可以用c语言创建39000×39000大小的二维数组嘛?

[此贴子已经被作者于2017-10-6 09:07编辑过]

搜索更多相关主题的帖子: 存储 空间 double for i++ 
2017-10-05 21:23
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:7 
malloc是用堆区,用地址表管理,有内存碎片化问题。
一次分配39000×39000个存储单元的块能否成功?
2017-10-06 21:33
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:7 
首先你得确定你有足够的内存。
其次你得确定你的操作系统和编译器支持那么大的内存。
就你的问题而言,6000的时候总共要占用1.8G多一点,7000的时候肯定就超过2个G了。
32位windows系统的(也许是编译器的锅)典型习性是用户空间不能大于2个G字节。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2017-10-07 10:23
katail
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-10-4
收藏
得分:0 
回复 2楼 吹水佬
可以举个简单例子嘛,如何分配n×n个存储空间的块?谢谢回复哈
2017-10-07 15:29
katail
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-10-4
收藏
得分:0 
回复 3楼 forever74
对啊,就是因为系统的内存空间不够啊,所以才想办法有没有别的途径可以实现创建存放double型数据的大小为39000×39000的数组(或是别的形式)。谢谢回复哈!
2017-10-07 15:34
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
以下是引用katail在2017-10-7 15:29:31的发言:

可以举个简单例子嘛,如何分配n×n个存储空间的块?谢谢回复哈

malloc(n*n*size)
2017-10-07 16:23
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
哦,那么问题的根源在于时间轴,按需分配内存是针对时间轴的,每个时刻都使用较少的内存,这样系统才有腾挪的余地。
另外,根据实际问题,往往你以为你需要那么大的空间,实际上这不是真的。
另另外,系统内存仍然是有限的。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2017-10-08 16:55
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
如果你的思维陷入需要开很大很大的内存才能解决的问题  需要更换思路了

实际上系统不可能允许你无限制的开内存

DO IT YOURSELF !
2017-10-10 14:03
快速回复:存储空间问题,求大神解答一下!!!
数据加载中...
 
   



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

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