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

堆和栈,要如何分配呢

2012-03-03 
堆和栈,要怎么分配呢?写关于指针的动态分配程序,但是对堆和栈还不是很清楚。因为程序中要多次对多个长度不

堆和栈,要怎么分配呢?
写关于指针的动态分配程序,但是对堆和栈还不是很清楚。
因为程序中要多次对多个长度不同的二维数组进行进行读写操作,所以想到用动态分配内存的方法来实现,但是由于这些二维数组的长度又各不一样,所以想到用一个函数来实现二维数组的内存的动态分配,但是总是实现不了,请各位不吝赐教!
=================================================
我的想法:
void     allocate(int   **array,   int   row,   int   col)
{
      array=   new   int   *[row];//分配的是指针数组
      array[0]   =   new   int   [row*col];//分配连续内存空间
      for   (int   i=1;i <row;i++)     //每个指针再指定开始内存地址
              array[i]=array[i-1]+col;
}
========
接下来,如果要动态分配指针,只要调用allocate函数就可以了,比如:
allocate(oldarray,row,col);
allocate(newarray,m,n);
======
问题是,函数调用的时候分配的是栈空间,函数调用结束之后就要释放了?而new分配的是堆空间,,这样操作的话是不是还是没办法成功实现呢?(调用是,oldarray和newarray都已经设置成全局变量了)。

[解决办法]
int *allocate(int row, int col)
{
// 这儿和数组维数没有关系,逻辑二维,物理一维连续
int *array = new int [row*col];
.....
return array;
}

void free(int *array)
{
delete []array;
}
[解决办法]
可以用引用来解决这个问题.

#include <iostream>

using namespace std;

void allocate(int** &marray, int row, int col)
{
marray = new int *[row];
for(int i=0; i <row; i++)
marray[i] = new int[col];
}

int main()
{
int **oldarray=NULL;
int **newarray=NULL;
allocate(oldarray, 5, 5);
allocate(newarray, 4, 10);
for(int i=0; i <5; i++)
for(int j=0; j <5; j++)
oldarray[i][j] = i*j;
for(int i=0; i <4; i++)
for(int j=0; j <10; j++)
newarray[i][j] = i*j;
// don 't forget to free all memores
for(int i=0; i <5; i++)
delete [] oldarray[i];
delete []oldarray;
for(int i=0; i <4; i++)
delete [] newarray[i];
delete[]newarray;
}

热点排行