结构如下:
typedef struct A{
 int n;
 CString s;
};在函数中
A a;
a.n = 1;
a.s = "1";
a的地址放在树节点数据中
tree.SetItemData(item,&a);
在后面取这个数据时数据已经被清了,这个我知道是什么原因。有谁知道如何保证这个结构体在将来可以使用?
我试过把结构用指针来动态生成,可是动态分配的结构a.s是空,不知道该如何解决。

解决方案 »

  1.   

    “动态分配的结构a.s是空?” 什么意思
    你给s 付值不就行了?
      

  2.   

    在函数中
    A a;
    a.n = 1;
    a.s = "1";
    ====================
    你这是局部变量,出了该函数a的生存期就结束了。所以就不行了。
    用new出来的结构吧。
      

  3.   

    呵呵,就是放到堆上就好,分配的a.s为空没关系,你强制赋值好了。
    struct A{
    int n;
    CString s;A():n(0), s(_T("")){}
    };
      

  4.   

    //不要这样用CString,很容易出问题,直接用CHAR吧typedef struct A{
     int n;
     char text[MAX_PATH];
    };
      

  5.   

    这个要用指针 
    typedef struct A{
     int n;
     CString *s;
    };然后 a.s = new CString();
    记得用delete.
      

  6.   

    不是我不想用CString*或者CHAR s[size];
    因为这个是历史问题,我不想做这些改动
    --------------------------------------------放到堆上?怎么放?A():n(0), s(_T("")){}这个写法还没见过 -_-!,只是初始化用的吗?
      

  7.   

    A():n(0), s(_T("")){}
    这个就是构造函数
    你NEW一个对象对直接给A附值可以保存的住的
      

  8.   

    你在函数中申明局部对象都将在函数结束时被销毁。
    应该new一个对象放在堆上,并记住在适当的时候销毁,否则有内存泄漏。也可以申明一个全局对象来使用。