1.首先我定义了一个结构
public:
typedef struct strucUrllist
{
  CStringList m_Urllist;
};2.读取一个文件,这个文件在另外一个地方用同样的结构写入的
strucUrllist stuList;
stuList.m_Urllist.AddTail("");
CFile m_file;
m_file.Open("Urllist.ust",CFile::modeRead|CFile::shareDenyNone);
m_file.Read(&stuList,sizeof(stuList));
m_file.Close();3.编译,通过!4.运行,报错!
test.exe 中的 0x78218eda (mfc80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x019c0074 时发生访问冲突5.程序停到了atlsimpstr.h以下位置
CStringData* GetData() const throw()
{
   return( reinterpret_cast< CStringData* >( m_pszData )-1 );/*程序停到了这里*/
}
请各位高手帮忙看看吧,一个下午了都没搞懂是怎么回事

解决方案 »

  1.   

    这个,写对象进去可就不对了。
    不管你存的数据有多长sizeof(strucUrllist)大小是固定的,你觉得合理么?
    你应该存m_Urllist里面所保存的内容才对.
      

  2.   

    读写都要一个一个的处理,这样的结构体是不可以这样读写的,里面包含指针。
    这样的可以
    struct aaa
    {
        char txt[200];
    };
      

  3.   

    我在另一个线程中就是这样写进去的啊
    CFile m_file;
    m_file.Open("Urllist.ust",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary|CFile::shareDenyNone);
    m_file.Write(&stuList,sizeof(stuList));
    m_file.Close();
      

  4.   


    问题出在了 CString 上,我估计楼主对 CString 还不了解。
      

  5.   

    CString长度是可变的,每次写可能都不一样.
    http://topic.csdn.net/u/20090116/15/cffddedf-020e-45c1-b599-64f4e84fdf84.html
      

  6.   

    CFile.Read(void * lpBuf
    这个写的非常明确 是一块连续的内存地址
    CString的存储是在堆上
    你这样写会覆盖CString地址一下的数据,而不是CString在堆上的数据CStdioFile.ReadString(CString & rString)这个才能直接使用CStirng
      

  7.   

    LZ很强,居然直接把CStringList写进去?把类写文件肯定会有问题。一般只能写基本数据类型的。