找回密码
 注册
Simdroid-非首页
查看: 547|回复: 18

[2. C/C++/C#] 【求助】在C++中解决大的动态数组存储问题

[复制链接]
发表于 2004-5-19 17:29:10 | 显示全部楼层 |阅读模式 来自 江苏南京
在C++中,本人用NEW开了很大的动态数组,太大了程序出问题,请教有何方法可以解决此问题。请指教!谢谢!
发表于 2004-5-21 10:03:06 | 显示全部楼层 来自 同济大学

回复: 【求助】在C++中解决大的动态数组存储问题

Simdroid开发平台
你动态数组肯定要出问题,用static
taizhong 该用户已被删除
发表于 2004-5-23 17:50:07 | 显示全部楼层 来自 同济大学
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2004-5-23 19:29:52 | 显示全部楼层 来自 江苏南京

回复: 【求助】在C++中解决大的动态数组存储问题

本人用C++进行数值计算,但是大概要开了如下a[3][3],da[3][3],dda[3][3],ai[30][3][3],dai[30][3][3],ddai[30][3][3],aij[30][30][3][3],daij[30][30][3][3]这样大小的数组各10个,而且还开了大概几个10000长度一维动态数组,均为double型,导致程序算的时候老是出错,进行不下去,检查出错的地方显然没问题。同时请教,在C++中如何进行一维数组和多维数组参数传递。请各位大虾指教,谢谢!
发表于 2004-6-4 12:36:46 | 显示全部楼层 来自 加拿大

回复: 【求助】在C++中解决大的动态数组存储问题

很久以前用C的时候,
用calloc, malloc来开动态数组。
并专门写了几个开空间与释放空间的函数。
可惜,没保存下来。
至於后来的C++,我就不知道了。
发表于 2004-6-6 11:07:14 | 显示全部楼层 来自 北京

回复: 回复: 【求助】在C++中解决大的动态数组存储问题

handong1994 wrote:
本人用C++进行数值计算,但是大概要开了如下a[3][3],da[3][3],dda[3][3],ai[30][3][3],dai[30][3][3],ddai[30][3][3],aij[30][30][3][3],daij[30][30][3][3]这样大小的数组各10个,而且还开了大概几个10000长度一维动态数组,均为double型,导致程序算的时候老是出错,进行不下去,检查出错的地方显然没问题。同时请教,在C++中如何进行一维数组和多维数组参数传递。请各位大虾指教,谢谢!

  
传地址
发表于 2004-6-23 12:49:03 | 显示全部楼层 来自 陕西西安

回复: 【求助】在C++中解决大的动态数组存储问题

一个例子
double*  m_pData;  
  
m_pData = new double[nSize];// 分配内存
if (IsBadReadPtr(m_pData, sizeof(double) * nSize))//检测
return FALSE;
  memset(m_pData, 0, sizeof(double) * nSize);// 将各元素值置0
  
最后别忘记  
if (m_pData)
{
    delete[] m_pData;
}
  
曾经试开到 100000 没有问题
 楼主| 发表于 2004-6-23 19:39:51 | 显示全部楼层 来自 江苏南京

回复: 【求助】在C++中解决大的动态数组存储问题

谢谢!但是对于二维以上的数组好像不太好解决。
对于二维数组可以首先开一个很大的共用数组,然后二维数组用一维数组存储,例如开几个100×100的二维数组:
double *ADDRESS = new double [1000000];  
double n[100];
n[0]=0;    double *kinetic_m=&(ADDRESS[n[0;])]
n[1]=n[0]+100*100;  double *kinetic_c=&(ADDRESS[n[1;])]
n[2]=n[1]+100*100;  double *kinetic_k=&(ADDRESS[n[2;])]
n[3]=n[2]+100*100;  double *kinetic_f=&(ADDRESS[n[3;])]
n[4]=n[3]+100*100;    
......
以此类推。
但是对于三维或者以上的数组这种方法好像很难,主要时一维数组和三维数组下标的对应关系较为复杂,当然耐心也可解决,好像可以用指针进行解决,但是对于三维或以上的例子,本人还没有看好。
请教各位是否还有较好的解决方法?个人愚见,请多多指教!
发表于 2004-8-16 19:05:29 | 显示全部楼层 来自 河北廊坊

回复: 【求助】在C++中解决大的动态数组存储问题

用全局变量,可以利用到32位Windows所限制的2G内存的数组!
发表于 2004-10-26 13:47:18 | 显示全部楼层 来自 湖南长沙

Re:【求助】在C++中解决大的动态数组存储问题

就你的数组而言其实并不算大,因为是按字节计算的,你可用单步调试看到底是哪句出错了。如果确实是分配太大出错(可用if判断分配的内存是否为NULL),可采用先定义一个指针分配一个不大的地址,当不够时再用realloc分配,这样就保证了合理利用空间。
传递一维数组用指针,至于多维必须将多维数组分解(可用指针数组,多级指针来做)再来传递,如果不分解则形参也必须是同样维数的数组,否则不能传递。
mictsn 该用户已被删除
发表于 2005-3-20 12:04:08 | 显示全部楼层 来自 陕西宝鸡
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2005-3-20 13:23:35 | 显示全部楼层 来自 日本

Re:【求助】在C++中解决大的动态数组存储问题

用现成的类库吧。网上可实现多维数组的类颇多,你也可以从他们的源码中学习怎样管理内存。
 楼主| 发表于 2005-3-20 19:13:48 | 显示全部楼层 来自 江苏南京

Re:【求助】在C++中解决大的动态数组存储问题

请介绍一下这方面的例子,谢谢!
发表于 2005-3-20 20:33:18 | 显示全部楼层 来自 日本

Re:【求助】在C++中解决大的动态数组存储问题

家里没有资料,一时回忆不出大多。可先看看TNT(Template NUmerical Toolkit: http://math.nist.gov/tnt/)吧,一个完整的数值计算类库,其程序很好懂。另外其作者Prof. Pozo还有不少公开源码,包括一个通用的adaptive finite element程序,也可以一看。
 楼主| 发表于 2005-3-21 19:53:35 | 显示全部楼层 来自 江苏南京

Re:【求助】在C++中解决大的动态数组存储问题

非常感谢!!!
 楼主| 发表于 2005-3-21 19:53:40 | 显示全部楼层 来自 江苏南京

Re:【求助】在C++中解决大的动态数组存储问题

非常感谢!!!
 楼主| 发表于 2005-3-21 19:53:40 | 显示全部楼层 来自 江苏南京

Re:【求助】在C++中解决大的动态数组存储问题

非常感谢!!!
发表于 2009-6-8 20:37:17 | 显示全部楼层 来自 LAN
可以用ATL中的VECTOR
回复 不支持

使用道具 举报

发表于 2009-6-13 17:21:46 | 显示全部楼层 来自 上海
没碰到过这种问题 是不是内存不够用
数据计算是需要比较大的内存来存数据的
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-1 13:25 , Processed in 0.058145 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表