我想把 CMapStringToString data 的数据拷贝添加到 类的数据成员 m_data, 但是运行时就出下面这个错误.到底什么地方出错?First-chance exception at 0x102320a0 (msvcr80d.dll) in tests.exe: 0xC0000005: Access violation reading location 0x0111fffc.
Unhandled exception at 0x102320a0 (msvcr80d.dll) in tests.exe: 0xC0000005: Access violation reading location 0x0111fffc.
class mydata
{
public:
CList<CMapStringToString*,CMapStringToString*>* m_data;
public:
bool AddData(CMapStringToString& data);
bool ValidateData(CMapStringToString& data);
};bool mydata::AddData(CMapStringToString& data)
{
CString* key;
CString* value;
if(this->ValidateData(data)){
CMapStringToString* rowdata=new CMapStringToString();
POSITION pos=data.GetStartPosition();
while(pos!=NULL){
key =new CString(_T(""));
value=new CString(_T(""));
data.GetNextAssoc(pos,*key,*value);
rowdata->SetAt(*key,*value);
}
m_data->AddTail(rowdata);
return true;
}
return false;
}
Unhandled exception at 0x102320a0 (msvcr80d.dll) in tests.exe: 0xC0000005: Access violation reading location 0x0111fffc.
class mydata
{
public:
CList<CMapStringToString*,CMapStringToString*>* m_data;
public:
bool AddData(CMapStringToString& data);
bool ValidateData(CMapStringToString& data);
};bool mydata::AddData(CMapStringToString& data)
{
CString* key;
CString* value;
if(this->ValidateData(data)){
CMapStringToString* rowdata=new CMapStringToString();
POSITION pos=data.GetStartPosition();
while(pos!=NULL){
key =new CString(_T(""));
value=new CString(_T(""));
data.GetNextAssoc(pos,*key,*value);
rowdata->SetAt(*key,*value);
}
m_data->AddTail(rowdata);
return true;
}
return false;
}
m_data=new CList<CMapStringToString*,CMapStringToString*>();刚调试的时候发现,问题出在,下面这段代码的第二次循环,但是不知道问题出在哪里 while(pos!=NULL){
key =new CString(_T(""));
value=new CString(_T(""));
data.GetNextAssoc(pos,*key,*value);
rowdata->SetAt(*key,*value);
}
数据类型 数据描述 数据列表(不得再为指针)
//Copy :清洗?容量序号?是否为同一数据类形?实列,引用,指针
之后你就AddTail ,数据没有地方存放!解决方法:
一、new 一个CList<CMapStringToString*,CMapStringToString*>*对象,然后赋值给 m_data
或者二、直接定义CList<CMapStringToString*,CMapStringToString*>m_data
#include <list>
using namespace stdext;
using namespace std;
typedef hash_map<string,string> datamap;
typedef list<datamap> datalist;
class mydata
{
public:
datalist m_data;
public:
bool adddata(datamap& data);
bool validatedata(const datamap & data);
}
bool mydata::adddata(datamap& data)
{
if(!validatedata(data))
return false;
//由于hash_map已经有缺省数据拷贝,所以不用new,直接push_back即可
m_data.push_back(data);
return true;
}
CString key;
CString value;
while(pos!=NULL){
data.GetNextAssoc(pos,key,value);
rowdata->SetAt(key,value);
}