一江春水向东流

做一个有思想的人,期待与每一位热爱思考的人交流,您的关注是对我最大的支持。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  44 随笔 :: 139 文章 :: 81 评论 :: 0 Trackbacks

一个关于动态二维数组分配内存的问题,以前也有做遇见过这样的,今天在网上参考了一个可以分配任意类型的示例,写了一个仅分配整型的二维数组小测试程序,在VC++6.0上测试通过

int **AllocMatrix ( int iRow, int iCol )
void FreeMatrix ( int** p )

示例程序:

 

#include  < stdio.h >
#include 
< stdlib.h >
#include 
< string .h >
//////////////////////////////////////////////////////////// //
void  FreeMatrix( int   ** p);
int **  AllocMatrix( int  iRow,  int  iCol);

int   ** AllocMatrix( int  iRow,  int  iCol)
{
    
int **  tdarray  =  NULL;
    
int *  tmparray  =  NULL;
    
int  i  =   0 ;
    
// allocate pointer array
     if ( ! (tdarray  =  ( int ** )malloc( sizeof ( char * ) * iRow)))
    
{
        printf(
" allocate iRow wrong\n " );
        exit(
1 );
    }

    
// allocate actual array space
     if ( ! (tmparray  =  ( int * )malloc( sizeof ( int ) * (iRow  *  iCol))))
    
{
        FreeMatrix(tdarray);
        printf(
" allocate iRow wrong\n " );
        exit(
1 );
    }

    
// initialize memory
    memset(tmparray,  0x00 sizeof ( int ) * (iRow  *  iCol));
    
// evaluate the pointer array
     for (i = 0 ; i < iRow; i ++ )
        tdarray[i] 
=  (tmparray  +  (i *  iCol) * sizeof ( int ));
    
return  tdarray;
}


void  FreeMatrix( int   ** p)
{
    
if (p)
    
{
        free(p[
0 ]);
        free(p);
    }

}


void  main( void )
{
    
int   ** arr  =  AllocMatrix( 2 , 2 );
    arr[
1 ][ 1 =   1 ;
    arr[
0 ][ 1 =   4 ;
    printf(
" %d, %d \n " ,arr[ 1 ][ 1 ], arr[ 0 ][ 1 ]);
    FreeMatrix(arr);
}

 

posted on 2007-04-14 10:01 allic 阅读(806) 评论(0)  编辑  收藏 所属分类: C/C++

只有注册用户登录后才能发表评论。


网站导航: