读书人

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

发布时间: 2013-07-25 16:22:17 作者: rapoo

动态二维数组如何申请内存
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];
另外,数据结构很多都是伪代码,具体实现还是要看编码方式.

读书人网 >C语言

热点推荐