我们老师让我们做个课程设计,但他什么也不指导,完全就是一片空白啊~好了,不废话了,进入主题。
就是我在做信息输入功能时,想把输入的信息再输出到文件中,创建一个名为“manager.txt”的文档。编译是通过了,但是在运行的时候,输入完信息再点确定。就说OX10211901a指令引用的Oxccccccccc内存。该内存不能为written.网上大都是说指针越界或数组溢出神马的~因为刚接触这种东西~完全不懂。求高手指教。这是这一段的代码:CManagerDLG objM; 

if(objM.DoModal()==IDOK){ Employee JL;
vector<Employee*> JLmanager;
JLmanager.push_back(&JL); vector<CString> JLstr;
JLstr.push_back(objM.m_strJLXM);
JLstr.push_back(objM.m_strJLXB); JLmanager[0]->SetName((char*)(LPCTSTR)JLstr[0]);
JLmanager[0]->SetGender((char*)(LPCTSTR)JLstr[1]);
JL.SetNum(objM.m_intJLBH);
JL.SetSalary(objM.m_floatJLGZ);
ofstream ofile("ewq.txt",ios::out);
ofile<<"经理姓名:"<<JL.GetName()<<"经理编号:"<<JL.GetNum()<<"经理性别:"<<JL.GetGender()<<"经理工资:"<<JL.GetSalary();
ofile.close();}
   }

解决方案 »

  1.   

    JLmanager.push_back(&JL);
    JL是局部变量,出了代码块就销毁了,用指针
      

  2.   

    Employee JL
    应该new出来。也可以这样使用容器:
    vector<Employee> JLmanager;这就要求你的Employee实现好深拷贝构造函数(如果没有需要深拷贝的东西,就不用实现,由编译器自动生成)
      

  3.   

    JLmanager[0]->SetName((char*)(LPCTSTR)JLstr[0]);
    JLmanager[0]->SetGender((char*)(LPCTSTR)JLstr[1]);不要直接用下标来访问vector,用iterator
    vector<Employee*>::iterator it = JLmanager.begin();
    if (it != JLmanager.end())
    {
      it->SetName((char*)(LPCTSTR)JLstr[0]);
    }