| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3277 人关注过本帖
标题:动态申请二维数组空间
只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
 问题点数:0 回复次数:7 
动态申请二维数组空间
short **Alloc_Short_Img (char x_size,char y_size)
{
    char m;
    short **map ;
    short *array;
    map = (short **)malloc(sizeof(short) * x_size * y_size);
    for(m=0;m<y_size;m++)
    {
        array = (short *)malloc(sizeof(short) * x_size);
        map[m] = array ;
    }
    return map;
}

short **Alloc_Short_Img (char x_size,char y_size)
{
    char m;
    short **map,*array;
    map = (short **)malloc(sizeof(short*) * y_size);
    array = (short *)malloc(sizeof(short) * x_size * y_size);
    for(m=0;m<y_size;m++)
    {
        map[m] = &array[m*x_size] ;
    }
    return map;
}
上面的两种方法,哪一种比较好呢  ??
搜索更多相关主题的帖子: 动态 空间 申请 
2008-03-19 15:08
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
顶上去..在学呢
2008-04-11 14:37
张信哲
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2008-4-3
收藏
得分:0 
真强。指针我怎么老是不会用
2008-04-11 20:22
闪闪4521
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-11-30
收藏
得分:0 
谁给个注释吧...
我不怎么懂..
2008-04-11 20:28
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
再顶一下
2008-04-12 00:40
huzi00008
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-10-9
收藏
得分:0 
我支持第二种,感觉是.

2008-04-12 03:59
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
顶上去再看看
2008-04-12 19:40
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
第一个程序是不是写错了?
修改如下:
程序代码:
short **Alloc_Short_Img (char x_size,char y_size)
{
    char m;
    short **map ;
    short *array;
    map = (short **)malloc(zsizeof(short *) * y_size);
    for(m=0;m<y_size;m++)
    {
        array = (short *)malloc(sizeof(short) * x_size);
        map[m] = array ;
    }
    return map;
}

或许你还在玩tc的图形编程,那里short和short *都是2字节。

很显然,程序2要好。
两个程序的相同点:都是需要申请sizeof(short) * x_size * y_size + zsizeof(short *) * y_size
不同点:程序一是每次申请sizeof(short) * x_size个字节,一共申请y_size次,程序二是一次性申请sizeof(short) * x_size * y_size个字节。

从不同点可以看出程序一笨拙且没有必要,多次调用malloc函数明显造成了时间的浪费,能一次申请够何必如此麻烦?还有隐含的空间的浪费,因为堆中需要结构体记录每次申请空间信息,这是系统层隐含的开销。

另外动态申请二维数组很少使用,因为这玩意儿实在没什么用,用一维数组模拟就可以了,还节省记录高维信息占用的空间,每做一次数据访问只需要读一次内存,你构造的多维有几维访问几次。

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-04-12 20:42
快速回复:动态申请二维数组空间
数据加载中...
 
   



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

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