堆和栈,要怎么分配呢?

vagrant_ch 2007-04-23 12:48:56
写关于指针的动态分配程序,但是对堆和栈还不是很清楚。
因为程序中要多次对多个长度不同的二维数组进行进行读写操作,所以想到用动态分配内存的方法来实现,但是由于这些二维数组的长度又各不一样,所以想到用一个函数来实现二维数组的内存的动态分配,但是总是实现不了,请各位不吝赐教!
=================================================
我的想法:
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都已经设置成全局变量了)。
...全文
261 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vagrant_ch 2007-04-28
  • 打赏
  • 举报
回复
谢谢!结贴……:)
Generics 2007-04-23
  • 打赏
  • 举报
回复
更好的办法是把释放内存也做成一个函数.


#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];
}

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

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
release(oldarray,5);
release(newarray,4);
return 0;
}
Generics 2007-04-23
  • 打赏
  • 举报
回复
可以用引用来解决这个问题.

#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;
}
yulefox 2007-04-23
  • 打赏
  • 举报
回复
new的资源只有在delete时才会释放,除非你的效率比malloc/free高。否则不要自己这样分配,还不如用new/delte或者malloc/free。

yulefox 2007-04-23
  • 打赏
  • 举报
回复
int *allocate(int row, int col)
{
// 这儿和数组维数没有关系,逻辑二维,物理一维连续
int *array = new int [row*col];
.....
return array;
}

void free(int *array)
{
delete []array;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧