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];//显示内存不足
怎样修改数据结构啊?
18 个解决方案
#1
哪位高手抽出点时间给指导一下啊!
#2
先把m_savenum改小一点试试看,比如m_savenum=1;
#3
数量小了是可以的
#4
将类定义中的大数组改为指针,构造时new
试试看
试试看
#5
将类定义中的大数组改为指针,构造时new,析构时delete
试试看
试试看
#6
DeviceParam//参数类
class DeviceChannel:virtual public DeviceParam//通道类继承参数类
class DeviceMachine:virtual DeviceChannel//机箱类继承通道类
class DeviceData:virtual DeviceMachine//数据类继承机箱类
最后
m_savenum=30000;
DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足
class DeviceChannel:virtual public DeviceParam//通道类继承参数类
class DeviceMachine:virtual DeviceChannel//机箱类继承通道类
class DeviceData:virtual DeviceMachine//数据类继承机箱类
最后
m_savenum=30000;
DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足
#7
自己可以分析一下,先sizeof你的结构体看是多大,然后再乘以你要分配的个数,看看这么大的内存分起来有没有什么问题。
#8
类定义中没有大数组 就是在打开文件时 m_savenum=30000;
DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足
是不是我的数据结构安排的不合理啊
DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足
是不是我的数据结构安排的不合理啊
#9
我创建多少个DeviceData 对象大小都是4,我的数据结构不对吧?
#10
如果你只有1G的内存条,却要申请2G的内存,自然会出错
如果你有4G的内存,却已经被其他程序使用了1G,而且这1G还是零散分布在4G的范围内,那么当你想要申请1G内存的时候,可能已经没有连续的1G空闲内存了,这时也会出错
修改数据结构,不使用过大的连续内存
要么空间上拆成很多块分布在整个内存中,要么分时间一次处理一小部分
如果你有4G的内存,却已经被其他程序使用了1G,而且这1G还是零散分布在4G的范围内,那么当你想要申请1G内存的时候,可能已经没有连续的1G空闲内存了,这时也会出错
修改数据结构,不使用过大的连续内存
要么空间上拆成很多块分布在整个内存中,要么分时间一次处理一小部分
#11
大小是4的那是指针
DeviceMachine SB_TD_Data[MACHINE_NUM];
double PH_Value[MACHINE_NUM][CHANNEL_NUM];
一个一维数组一个二维数组,虽然不知道这两个宏都被定义成多少,但大小小不了
#12
我这样嵌套继承是不是不对啊?
#13
类中的数组(如SB_TD_Data[MACHINE_NUM] PH_Value[MACHINE_NUM][CHANNEL_NUM])都用指针吧,然后new吧。
#14
MACHINE_NUM=33
CHANNEL_NUM=33
我是这样设计数据结构的 先有一个参数类,其次通道类继承参数类
机箱类在继承通道类,最后创建数据类来继承机箱类
实例化大量数据类
CHANNEL_NUM=33
我是这样设计数据结构的 先有一个参数类,其次通道类继承参数类
机箱类在继承通道类,最后创建数据类来继承机箱类
实例化大量数据类
#15
主要是那个二维数组PH_Value, 33*33*30000很大。
#16
明显不对啊,你的代码是定义了一个指针,然后给这个指针分配了sizeof(DeviceData)x30000个byte的内存空间,你算算要分多大!
#17
没说明白,不是你的数据结构不对,是你对指针理解错了。指针变量占用的空间大小是4个byte,但是后面的new操作时在为这个指针向系统申请可以使用的内存空间,这段内存空间的大小是sizeof(DeviceData)x30000,而且是要求连续的。
#18
谢谢大家,问题解决了!!!
#1
哪位高手抽出点时间给指导一下啊!
#2
先把m_savenum改小一点试试看,比如m_savenum=1;
数据结构
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];//显示内存不足
怎样修改数据结构啊?
#3
数量小了是可以的
#4
将类定义中的大数组改为指针,构造时new
试试看
试试看
#5
将类定义中的大数组改为指针,构造时new,析构时delete
试试看
试试看
#6
DeviceParam//参数类
class DeviceChannel:virtual public DeviceParam//通道类继承参数类
class DeviceMachine:virtual DeviceChannel//机箱类继承通道类
class DeviceData:virtual DeviceMachine//数据类继承机箱类
最后
m_savenum=30000;
DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足
class DeviceChannel:virtual public DeviceParam//通道类继承参数类
class DeviceMachine:virtual DeviceChannel//机箱类继承通道类
class DeviceData:virtual DeviceMachine//数据类继承机箱类
最后
m_savenum=30000;
DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足
#7
数量小了是可以的
自己可以分析一下,先sizeof你的结构体看是多大,然后再乘以你要分配的个数,看看这么大的内存分起来有没有什么问题。
#8
类定义中没有大数组 就是在打开文件时 m_savenum=30000;
DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足
是不是我的数据结构安排的不合理啊
DeviceData *m_data=new DeviceData[m_savenum];//显示内存不足
是不是我的数据结构安排的不合理啊
#9
我创建多少个DeviceData 对象大小都是4,我的数据结构不对吧?
#10
如果你只有1G的内存条,却要申请2G的内存,自然会出错
如果你有4G的内存,却已经被其他程序使用了1G,而且这1G还是零散分布在4G的范围内,那么当你想要申请1G内存的时候,可能已经没有连续的1G空闲内存了,这时也会出错
修改数据结构,不使用过大的连续内存
要么空间上拆成很多块分布在整个内存中,要么分时间一次处理一小部分
如果你有4G的内存,却已经被其他程序使用了1G,而且这1G还是零散分布在4G的范围内,那么当你想要申请1G内存的时候,可能已经没有连续的1G空闲内存了,这时也会出错
修改数据结构,不使用过大的连续内存
要么空间上拆成很多块分布在整个内存中,要么分时间一次处理一小部分
#11
我创建多少个DeviceData 对象大小都是4,我的数据结构不对吧?
大小是4的那是指针
DeviceMachine SB_TD_Data[MACHINE_NUM];
double PH_Value[MACHINE_NUM][CHANNEL_NUM];
一个一维数组一个二维数组,虽然不知道这两个宏都被定义成多少,但大小小不了
#12
我这样嵌套继承是不是不对啊?
#13
类中的数组(如SB_TD_Data[MACHINE_NUM] PH_Value[MACHINE_NUM][CHANNEL_NUM])都用指针吧,然后new吧。
#14
MACHINE_NUM=33
CHANNEL_NUM=33
我是这样设计数据结构的 先有一个参数类,其次通道类继承参数类
机箱类在继承通道类,最后创建数据类来继承机箱类
实例化大量数据类
CHANNEL_NUM=33
我是这样设计数据结构的 先有一个参数类,其次通道类继承参数类
机箱类在继承通道类,最后创建数据类来继承机箱类
实例化大量数据类
#15
MACHINE_NUM=33
CHANNEL_NUM=33
我是这样设计数据结构的 先有一个参数类,其次通道类继承参数类
机箱类在继承通道类,最后创建数据类来继承机箱类
实例化大量数据类
主要是那个二维数组PH_Value, 33*33*30000很大。
#16
我创建多少个DeviceData 对象大小都是4,我的数据结构不对吧?
明显不对啊,你的代码是定义了一个指针,然后给这个指针分配了sizeof(DeviceData)x30000个byte的内存空间,你算算要分多大!
#17
我创建多少个DeviceData 对象大小都是4,我的数据结构不对吧?
明显不对啊,你的代码是定义了一个指针,然后给这个指针分配了sizeof(DeviceData)x30000个byte的内存空间,你算算要分多大!
没说明白,不是你的数据结构不对,是你对指针理解错了。指针变量占用的空间大小是4个byte,但是后面的new操作时在为这个指针向系统申请可以使用的内存空间,这段内存空间的大小是sizeof(DeviceData)x30000,而且是要求连续的。
#18
谢谢大家,问题解决了!!!