求解决内存不够用有关问题
求解决内存不够用问题
想开一个二维数组 A[N][N] 来储存数据,但N是未知的,需要在程序运行中读取;
因此想到用 A = ( int * )calloc( ( N*N ) , sizeof( int ) ) ; 来储存。 但这么做会导致有时候内存不够用,怎么解决呢?
另外:A = ( int * )calloc( N , sizeof( int ) ) ;基本够用的。
------解决方案--------------------
int **p=(int **)malloc(N*sizeof(int*));
int i;
for(i=0;i<N;i++)
{
p[i]=(int *)malloc(N*sizeof(int));
}
然后可以当作普通的二维数组使用。 p[i][j]这样
------解决方案--------------------
定义动态数组可以这么做:
比如定义一个二维数组p,各维分别如下:p[2,5]
那就这么写:
想开一个二维数组 A[N][N] 来储存数据,但N是未知的,需要在程序运行中读取;
因此想到用 A = ( int * )calloc( ( N*N ) , sizeof( int ) ) ; 来储存。 但这么做会导致有时候内存不够用,怎么解决呢?
另外:A = ( int * )calloc( N , sizeof( int ) ) ;基本够用的。
------解决方案--------------------
int **p=(int **)malloc(N*sizeof(int*));
int i;
for(i=0;i<N;i++)
{
p[i]=(int *)malloc(N*sizeof(int));
}
然后可以当作普通的二维数组使用。 p[i][j]这样
------解决方案--------------------
定义动态数组可以这么做:
比如定义一个二维数组p,各维分别如下:p[2,5]
那就这么写:
- C/C++ code
int (*p)[5]; // 声明一个指向动态整型二维数组的指针。 p=(int(*)[5])malloc(sizeof(int)*2*5); // 给该数组分配空间。 for (i=0;i<2;++i) for (j=0;j<5;++j) p[i][j]=i*5+j; // 使用该数组
------解决方案--------------------
------解决方案--------------------
链表比数组(动态的或者静态的)耗费的空间多很多倍。不过在链表节点中维护指针,操作系统对每一个节点也的分配和释放也需要额外的空间。