在.h里定义 map<int, MY_XML> m_rdxml;struct MY_XML
{
....
const char* ctime;
....
}.cpp中
void fun1()
{
while{
        ....读xml文件并赋值
        MY_XML tmp;
         tmp.ctime = **;
         m_rdxml[1] = tmp;
      }//end while
  MY_XML tmp2 = m_rdxml[1];
  const char* ctmp = tmp2.ctime;//此时获得的时间正确
}void fun2()

   fun1();
   MY_XML tmp2 = m_rdxml[1];
   const char* ctmp = tmp2.ctime;//此时获得的时间 不 不 不 正确}
社么原因啊?

解决方案 »

  1.   

    你的MY_XML tmp2 = m_rdxml[1];中的tmp2是临时变量,离开作用域就无效了。
      

  2.   


    你指的是fun1还是fun2里的?两个里都是临时变量,都是从成员变量m_rdxml赋的值啊
      

  3.   

    如果这么简单不会不正确的,你的while里是否循环给key为1的键值对赋值了啊?
    你可以把你的代码多贴一些
      

  4.   

    m_rdxml[1];
    这个对象是否会改变.
      

  5.   

    额刚才没太仔细看,其实,应该是以下代码的问题。
    MY_XML tmp;
    tmp.ctime = **; //这里const char* ctime指向了一个局部字符串常量,离开作用域后这个字符串常量的地址就无效了。
    m_rdxml[1] = tmp; //这里m_rdxml[1]中const char* ctime指向的地址和tmp.ctime一样,因此离开作用域后就指向了无效地址。
      

  6.   

    去掉WHILE 看看,我怀疑是这里重新赋值了
      

  7.   

    请给MY_XML定义好拷贝构造函数,和operator=
      

  8.   

    sky101010ws:给key为1的赋值了,在fun1的结尾我还取出来看了看
    oyljerry:这个对象没有被改变,我是在fun1的结尾观测,又在fun2调用了fun1后马上观测,而且fun2一开始就调用的fun1,其前没有任何代码不知道差哪儿呢?
      

  9.   

    怎么会差别那么大啊问题可能是:我在fun1里打开xml文件、读文件,使用的是局部变量xmldoc.LoadFile("TEST.xml")我把xmldoc定义放到头文件里,改成成员变量,然后fun1和fun2中都能观测正确时间值了高手给解释一下。。
      

  10.   

    #include <map>
    #include <iostream>
    using namespace std;
    struct MY_XML
    {
    const char* ctime;
    };map<int, MY_XML> m_rdxml;
    void fun1()
    { MY_XML tmp;
    tmp.ctime = "abc";
    m_rdxml[1] = tmp; MY_XML tmp2 = m_rdxml[1];
    const char* ctmp = tmp2.ctime;//此时获得的时间正确
    cout<<"fun1"<<ctmp<<endl;
    }void fun2()
    {
    fun1();
    MY_XML tmp2 = m_rdxml[1];
    const char * ctmp = tmp2.ctime;//此时获得的时间 不 不 不 正确
    cout<<"fun2"<<ctmp<<endl;
    }int main(int argc, char ** argv)
    { fun2();
    system("pause");
    return 0;
    }
    测试了一下是正确的
    你看你的逻辑是不是出错了
    map的用法没有错