在.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;//此时获得的时间 不 不 不 正确}
社么原因啊?
{
....
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;//此时获得的时间 不 不 不 正确}
社么原因啊?
你指的是fun1还是fun2里的?两个里都是临时变量,都是从成员变量m_rdxml赋的值啊
你可以把你的代码多贴一些
这个对象是否会改变.
MY_XML tmp;
tmp.ctime = **; //这里const char* ctime指向了一个局部字符串常量,离开作用域后这个字符串常量的地址就无效了。
m_rdxml[1] = tmp; //这里m_rdxml[1]中const char* ctime指向的地址和tmp.ctime一样,因此离开作用域后就指向了无效地址。
oyljerry:这个对象没有被改变,我是在fun1的结尾观测,又在fun2调用了fun1后马上观测,而且fun2一开始就调用的fun1,其前没有任何代码不知道差哪儿呢?
#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的用法没有错