我定义一个对话框类 
        microphoneStandard1  *m_Standard1;//为结构体指针 
int m_Standard1num; 
microphoneStandard2  *m_Standard2; 
int m_Standard2num; 
microphoneStandard3  *m_Standard3; 
int m_Standard3num; 
BOOL CKXRecognitionApp::KXStandard()//定标 

AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
        Cstandard m_standard;//对话框类 
memcpy(m_standard.m_Standard1,m_Standard1,m_Standard1num*sizeof(microphoneStandard1)); 
memcpy(m_standard.m_Standard2,m_Standard2,m_Standard2num*sizeof(microphoneStandard2)); 
memcpy(m_standard.m_Standard3,m_Standard3,m_Standard3num*sizeof(microphoneStandard3)); 
m_standard.m_Standard1num=m_Standard1num; 
m_standard.m_Standard2num=m_Standard2num; 
m_standard.m_Standard3num=m_Standard3num; 
m_standard.DoModal(); 
        return TRUE; 

我分配内存了,数据也读取成功了 。
为什么关掉对话框后,m_Standard1里的cstring类型的变量内容就变成乱码了呢? 本来是“x1”
后来成了“屯屯苁屯屯屯屯屯屯屯屯屯屯屯屯苁屯屯屯屯屯屯屯屯屯屯屯屯苁屯屯屯屯屯屯屯屯屯屯屯屯苁屯屯屯屯屯屯屯屯屯屯”望高手指点!!!

解决方案 »

  1.   

    补充:
    m_Standard1 是CKXRecognitionApp类里的,
    Cstandard m_standard是定义的对话框类,
    m_standard.m_Standard1 与 m_Standard1 是不同类里面的,地址也不一样,所以数据拷贝是没问题的,关闭对话框后m_Standard1 里的其它数据也是对的,就是cstring类型的变量变了。
      

  2.   

    UINT nRet = m_standard.DoModal(); 
    对话框返回后,if(nRet == IDOK)
    {
      // 保存一下你的成员变量等,
    }
      

  3.   

    照你这样说的是没有问题的。你跟踪代码看一下。两个结构体的地址是不是一样?在DoModal()执行前后看一下
    Standard1 的值。再有试试不在Dll中会怎么样?
      

  4.   

    m_Standard1的值是怎么来的?m_Standard1是一个指针变量,如果它指向的对象被释放了,就不能再使用了。
      

  5.   

    这个问题已经解决,把cstring改为char型就ok了。感谢8楼。