创建继承类 导致内存不足 求解!!!

gomez11544 2013-12-17 11:09:47
数据结构
class DeviceParam
{
public:
int mlc;
int lmd;
double fenbianlv;
int qlxz;
double kxiuzheng;
double resistance1;
double resistance2;
double moliang;
double bosongbi;
char danwei[10];
};
class DeviceChannel:virtual public DeviceParam
{
public:
double initialdata;
double showdata;
public:
DeviceChannel()
{
///初始化
}
void InitialVlaue(double mydata)//初始值
{
}
double ShowValue(BOOL plusFlag)
{
return 数据;
}

};
class DeviceMachine:virtual DeviceChannel
{
public:
DeviceChannel OneTD[CHANNEL_NUM];
void SetChannelData(double *m_data,int channel,int type)
{
}
void GetChannelData(double *m_data,int channel,int type)////一列数据所有通道
{
}
};
class DeviceData:virtual DeviceMachine
{
public:
int m_channel;
int m_machine;
char Time_Data[50];
DeviceMachine SB_TD_Data[MACHINE_NUM];
double PH_Value[MACHINE_NUM][CHANNEL_NUM];
public:
void GetChannelNum(int num);
BOOL SaveData(char time_data[],int machine,int channel, CString filepath);
void PH_Zero();
void WritePhZero(CString filePath);
BOOL ReadPhZero(CString filePath);

};
在菜单中打开文件后
m_savenum=30000;
DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足
怎样修改数据结构啊?

...全文
249 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
gomez11544 2013-12-17
  • 打赏
  • 举报
回复
MACHINE_NUM=33 CHANNEL_NUM=33 我是这样设计数据结构的 先有一个参数类,其次通道类继承参数类 机箱类在继承通道类,最后创建数据类来继承机箱类 实例化大量数据类
Binzo 2013-12-17
  • 打赏
  • 举报
回复
类中的数组(如SB_TD_Data[MACHINE_NUM]  PH_Value[MACHINE_NUM][CHANNEL_NUM])都用指针吧,然后new吧。
gomez11544 2013-12-17
  • 打赏
  • 举报
回复
我这样嵌套继承是不是不对啊?
baichi4141 2013-12-17
  • 打赏
  • 举报
回复
引用 9 楼 gomez11544 的回复:
我创建多少个DeviceData 对象大小都是4,我的数据结构不对吧?
大小是4的那是指针 DeviceMachine SB_TD_Data[MACHINE_NUM]; double PH_Value[MACHINE_NUM][CHANNEL_NUM]; 一个一维数组一个二维数组,虽然不知道这两个宏都被定义成多少,但大小小不了
baichi4141 2013-12-17
  • 打赏
  • 举报
回复
如果你只有1G的内存条,却要申请2G的内存,自然会出错 如果你有4G的内存,却已经被其他程序使用了1G,而且这1G还是零散分布在4G的范围内,那么当你想要申请1G内存的时候,可能已经没有连续的1G空闲内存了,这时也会出错 修改数据结构,不使用过大的连续内存 要么空间上拆成很多块分布在整个内存中,要么分时间一次处理一小部分
gomez11544 2013-12-17
  • 打赏
  • 举报
回复
我创建多少个DeviceData 对象大小都是4,我的数据结构不对吧?
gomez11544 2013-12-17
  • 打赏
  • 举报
回复
类定义中没有大数组 就是在打开文件时 m_savenum=30000; DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足 是不是我的数据结构安排的不合理啊
大奶兔白糖 2013-12-17
  • 打赏
  • 举报
回复
引用 3 楼 gomez11544 的回复:
数量小了是可以的
自己可以分析一下,先sizeof你的结构体看是多大,然后再乘以你要分配的个数,看看这么大的内存分起来有没有什么问题。
gomez11544 2013-12-17
  • 打赏
  • 举报
回复
DeviceParam//参数类 class DeviceChannel:virtual public DeviceParam//通道类继承参数类 class DeviceMachine:virtual DeviceChannel//机箱类继承通道类 class DeviceData:virtual DeviceMachine//数据类继承机箱类 最后 m_savenum=30000; DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足
赵4老师 2013-12-17
  • 打赏
  • 举报
回复
将类定义中的大数组改为指针,构造时new,析构时delete 试试看
赵4老师 2013-12-17
  • 打赏
  • 举报
回复
将类定义中的大数组改为指针,构造时new 试试看
gomez11544 2013-12-17
  • 打赏
  • 举报
回复
数量小了是可以的
图灵狗 2013-12-17
  • 打赏
  • 举报
回复
先把m_savenum改小一点试试看,比如m_savenum=1;
引用 楼主 gomez11544 的回复:
数据结构 class DeviceParam { public: int mlc; int lmd; double fenbianlv; int qlxz; double kxiuzheng; double resistance1; double resistance2; double moliang; double bosongbi; char danwei[10]; }; class DeviceChannel:virtual public DeviceParam { public: double initialdata; double showdata; public: DeviceChannel() { ///初始化 } void InitialVlaue(double mydata)//初始值 { } double ShowValue(BOOL plusFlag) { return 数据; } }; class DeviceMachine:virtual DeviceChannel { public: DeviceChannel OneTD[CHANNEL_NUM]; void SetChannelData(double *m_data,int channel,int type) { } void GetChannelData(double *m_data,int channel,int type)////一列数据所有通道 { } }; class DeviceData:virtual DeviceMachine { public: int m_channel; int m_machine; char Time_Data[50]; DeviceMachine SB_TD_Data[MACHINE_NUM]; double PH_Value[MACHINE_NUM][CHANNEL_NUM]; public: void GetChannelNum(int num); BOOL SaveData(char time_data[],int machine,int channel, CString filepath); void PH_Zero(); void WritePhZero(CString filePath); BOOL ReadPhZero(CString filePath); }; 在菜单中打开文件后 m_savenum=30000; DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足 怎样修改数据结构啊?
gomez11544 2013-12-17
  • 打赏
  • 举报
回复
哪位高手抽出点时间给指导一下啊!
gomez11544 2013-12-17
  • 打赏
  • 举报
回复
谢谢大家,问题解决了!!!
大奶兔白糖 2013-12-17
  • 打赏
  • 举报
回复
引用 16 楼 bijiaoben 的回复:
[quote=引用 9 楼 gomez11544 的回复:] 我创建多少个DeviceData 对象大小都是4,我的数据结构不对吧?
明显不对啊,你的代码是定义了一个指针,然后给这个指针分配了sizeof(DeviceData)x30000个byte的内存空间,你算算要分多大![/quote] 没说明白,不是你的数据结构不对,是你对指针理解错了。指针变量占用的空间大小是4个byte,但是后面的new操作时在为这个指针向系统申请可以使用的内存空间,这段内存空间的大小是sizeof(DeviceData)x30000,而且是要求连续的。
大奶兔白糖 2013-12-17
  • 打赏
  • 举报
回复
引用 9 楼 gomez11544 的回复:
我创建多少个DeviceData 对象大小都是4,我的数据结构不对吧?
明显不对啊,你的代码是定义了一个指针,然后给这个指针分配了sizeof(DeviceData)x30000个byte的内存空间,你算算要分多大!
Binzo 2013-12-17
  • 打赏
  • 举报
回复
引用 14 楼 gomez11544 的回复:
MACHINE_NUM=33 CHANNEL_NUM=33 我是这样设计数据结构的 先有一个参数类,其次通道类继承参数类 机箱类在继承通道类,最后创建数据类来继承机箱类 实例化大量数据类
主要是那个二维数组PH_Value, 33*33*30000很大。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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