超大数组

fluidlight 2004-06-09 05:29:08
程序中想定义3维大数组,如何解决运行内存不足的问题?有什么其他方法定义3维大数组吗?3x。
...全文
394 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
antijpn 2004-06-11
  • 打赏
  • 举报
回复
奇怪了,就算是不采用静态分配,也不至于只能分配40*40*40的数组吧?VC++ 2003里面编译的话,不用参数修改stack大小可以使用60*60*60的数组,如果使用参数修改一下栈大小的话,可以容纳更大的数组
fluidlight 2004-06-11
  • 打赏
  • 举报
回复
Thank you so much! 我现在用笔记本就能运行几百立方的数组了,that's amazing.:)
neophyte111 2004-06-10
  • 打赏
  • 举报
回复
不知道你是否用了动态申请,如果用了,不应该只有40*40*40的
申请与释放2至3维数组的函数
template<class T>
inline void Intialize2DArray(T **&xxx, long rows, long cols)
{
long i, j;
for (i=0; i<rows; i++)
{
for (j=0; j<cols; j++)
{
xxx[i][j] = T(0);
}
}
}

template<class T>
void Create2DArray(T **&xxx, long rows, long cols)
{
xxx = new T *[rows];
for (long i=0; i<rows; i++)
{
xxx[i]=new T[cols];
}
Intialize2DArray(xxx, rows, cols);
}

//删除2维数组时只需2个参数,不需要传数组的第2维大小
template<class T>
void Delete2DArray(T **&xxx, long rows)
{
for(long i=0; i<rows; i++)
{
delete []xxx[i];
}
delete []xxx;
xxx=0;
}

template<class T>
void Create3DArray(T ***&xxx, long n1, long n2, long n3)
{
xxx = new T **[n1];
for (long i=0; i<n1; i++)
{
Create2DArray(xxx[i], n2, n3);
Intialize2DArray(xxx[i], n2, n3);
}
}

//删除3维数组时只需3个参数,不需要传数组的第3维大小
template<class T>
void Delete3DArray(T ***&xxx, long n1, long n2)
{
for (long i=0; i<n1; i++)
{
Delete2DArray(xxx[i], n2);
}
delete []xxx;
xxx=0;
}

举例:使用3维数组

int n1 = 100;
int n2 = 100;
int n3 = 100;
float ***array_3D;
Create3DArray(array_3D, n1, n2, n3);

...//use the 3d array in form "array_3D[i][j][k]"

Delete3DArray(array_3D, n1, n2);
fluidlight 2004-06-10
  • 打赏
  • 举报
回复
谢谢楼上的回答。我现在的程序只能运行40x40x40,不明白为什么只有这么小。即使我的电脑只有256M内存,也不应该啊。是不是windows对这种DOS程序(我用的vc++)在编译的时候就限制了内存的使用呢?
xumiao0705 2004-06-09
  • 打赏
  • 举报
回复
3维大数组你首先要考虑能否压缩。不能的话只有动态分配空间这种方法。
kaphoon 2004-06-09
  • 打赏
  • 举报
回复
首先考虑能不能不用
3维大数组
实在没办法
考虑动态分配
SCUM 2004-06-09
  • 打赏
  • 举报
回复
动态分配
三重指针

69,336

社区成员

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

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