首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

动态二维数组怎么申请内存

2013-07-25 
动态二维数组如何申请内存typedef struct{int m//顶点个数VexType *vexs//顶点AdjType *arcs[]//关系表

动态二维数组如何申请内存
typedef struct
{
    int m;//顶点个数
    VexType *vexs;//顶点
    AdjType *arcs[];//关系表
}GraphMatrix, *PGraphMatrix;//邻接矩阵表示法
有点晕了,这个arcs怎么申请内存? 动态二维数组如何申请内存
[解决办法]
不要用AdjType*[]类型,用AdjType ** 来表示“数组的数组”。

分配和释放:


AdjType ** alloc_adj_array_2( unsigned int row_count, unsigned int col_count )
{
    AdjType ** result = malloc( row_count * sizeof(AdjType*) );
    int i;
    if( result == NULL )
    {
        goto err;
    }
    else
    {
        for( i = 0; i < row_count; ++ i )
        {
            result[i] = malloc( col_count * sizeof( AdjType ));
            if( result[i] == NULL )
            {
                goto err;
            }
        }
    }
    return result;

err:
    if( result != NULL )
    {
        for( i = 0; i < row_count; ++ i)
        {
            if( result[i] != NULL )
            {
                free(result[i]);
            }


        }
        free(result);
    }
    return NULL;
}

void free_adj_array_2( AdjType ** ary )
{
    for( i = 0; i < row_count; ++ i)
    {
        free(ary[i]);
    }
    free(ary);
}


[解决办法]
引用:
Quote: 引用:

不要用AdjType*[]类型,用AdjType ** 来表示“数组的数组”。
[/code]

数组的数组我会的,我看了下书里直接使用了动态二维数组,想知道怎么申请内存的,毕竟数组的数组和动态二维数组使用方式略有不同,动态二维数组可以直接a[i][j]来使用


动态二维数组不是数组的数组吗?
[解决办法]

int *p[10];
for(int i = 0; i < 10; i++)
p[i] = (int *)malloc(sizeof(int)*10);



用这种方法创建你想要的 二维数组.
同样也可以直接 用 p[i][j];
另外,数据结构很多都是伪代码,具体实现还是要看编码方式.

热点排行