超难,C++高手来帮忙解决一下,内存显示和赋值结果不一致的问题
有下面一段代码:
//ASN.1节点信息
struct ASNNodeTagInfo
{
ASNNodeTagInfo()
:tag_value(0),index(0),next(NULL)
{};
ASNNodeTagInfo(const ASNNodeTagInfo& obj)
{
tag_value = obj.tag_value;
index = obj.index;
if(obj.next != NULL)
next = new ASNNodeTagInfo(*obj.next);
else
next = NULL;
};
~ASNNodeTagInfo()
{
delete next;
};
size_t tag_value;
size_t index;
ASNNodeTagInfo* next;
};
//结构事件字段格式定义
struct Table_Event_Field_Cfg
{
ASNNodeTagInfo* pASNNodeTagInfo;
double length;
int field_cfg_id;
int record_cfg_id;
int data_type_id;//编码方式
/* int event_attr_id;*/
int seq_nbr;
int data_offset;
int data_seek_end;
int iden_len;
int delimit_str_len;
int i_field_iden;
bool is_hex_iden;
//char name[MD_NAME_LEN + 1];
char field_iden[PRE_LENFOR_FIELD_IDEN_1 + 1];
char type_of_length[PRE_LENFOR_TYPE_OF_LENGTH + 1];
char delimit_str[PRE_LENFOR_DELIMIT_STR + 1];
char state_date[SIZE_DATE_TIME];
char state[PRE_LENFOR_STATE + 1];
char verify_flag[PRE_LENFOR_VERIFY_FLAG + 1];//字段校验标志
Table_Event_Field_Cfg(){memset(this, 0x00, sizeof(Table_Event_Field_Cfg));};
Table_Event_Field_Cfg(const Table_Event_Field_Cfg& obj)
{
memcpy(this,&obj,sizeof(Table_Event_Field_Cfg));
if(obj.pASNNodeTagInfo != NULL)
pASNNodeTagInfo = new ASNNodeTagInfo(*obj.pASNNodeTagInfo);
};
~Table_Event_Field_Cfg(){
if (NULL != pASNNodeTagInfo)
{
delete pASNNodeTagInfo;
pASNNodeTagInfo = NULL;
}
};
};
//通用缓存配置
struct CBufferCfg
{
int num;
char type_of_length;
const char* iden;
const char* delimit_str;
double length;
int data_offset;
int data_seek_end;
CBufferType buffer_type;
const void* pFactBufferCfg;
int iden_len;
int delimit_str_len;
int seq_nbr;
int iden_value;
CBufferCfg(const Table_Event_Field_Cfg* pEvent_Field_Cfg)
{
num = 1;
type_of_length = pEvent_Field_Cfg->type_of_length[0];
iden = pEvent_Field_Cfg->field_iden;
delimit_str = pEvent_Field_Cfg->delimit_str;
length = pEvent_Field_Cfg->length;
data_offset = pEvent_Field_Cfg->data_offset;
data_seek_end = pEvent_Field_Cfg->data_seek_end;
iden_len = pEvent_Field_Cfg->iden_len;
delimit_str_len = pEvent_Field_Cfg->delimit_str_len;
seq_nbr = pEvent_Field_Cfg->seq_nbr;
iden_value = pEvent_Field_Cfg->i_field_iden;
buffer_type = BT_FIELD;
pFactBufferCfg = pEvent_Field_Cfg;
}
};
当调用CBufferCfg buffer(pCfg);得到buffer中的数据跟pCfg中对应的数据不一致,其中pCfg类型为const Table_Event_Field_Cfg*类型,
开始以为是运行的.o文件跟最新代码的不一致引起的,但是我把debug目录中的所有文件都删除后完全重新编译了还是这样
如:pEvent_Field_Cfg->type_of_length为“3”,但是赋值后type_of_length为0
[解决办法]
调试一下嘛,观察一下变量,可能哪里数组越界了
[解决办法]
仔细跟踪赋值过程,注意赋值前后被赋值对象是不是真的运行了,以及赋值前后变量的值是不是变化了
还要观察赋值之前某些步骤上是不是有不应该改变的变量改变了,如果有则很可能是数组越界!
是在不行,可能就是编译和调试环境的问题,改用Release版本试试,看不到值就将他打出来!
[解决办法]
个人感觉,NULL指针只是表象,得彻查