因为m_pList->string1没有空间,要分配空间!

解决方案 »

  1.   

    what's wrong (in details)!
      

  2.   

    改成这样就没问题了
        List* m_pList=new List;
        m_pList->tring1="asdfads";
        delete m_pList;
      

  3.   


    /********************************************/
    C++中结构和类是类似的,只不过其成员变量默认情况下是public的。C++强烈要求将类实例化过程中要使用new 来进行,所以,依我看应该这样子:
    struct List{
          CString tring1;
          CString tring2;
    };
    定义以结构体指针
    List* m_pList= new(List); 
    m_pList->a = "i like C++";
    cout << m_pList->a << endl; 
      

  4.   

    同意: xiaoxiaohan(萧晓寒) 
      

  5.   

    malloc只是简单分配内存,不对tring1和tring2作初始化,所以不行。
      

  6.   

    如果我的结构提中的数据需要保存起来,不能NEW之后马上删除
    又应该如何那难道用MALLOC分配控件不行吗CString是动态的,为什么我们在定义一个CString后,可以对他户不同长度的值。他的空间应该又一定的限制吧
      

  7.   

    xiaoxiaohan(萧晓寒)同志说得对。 下面我来补充几点(象某些领导)
    当用allocate函数分配空间时并不调用构造函数, 
    用new 时就会调用的。
    这个调用包括成员变量的。 给分,给分! 说得对都要给分。
      

  8.   

    struct List{
          char tring1[20];
          char tring2[20];
    };
    定义以结构体指针
    struct List* m_pList=(struct List*)malloc(sizeof(List));
    sprintf(m_pList->string1,"%s","asdfads");
    就不会有问题了。
      

  9.   

    TO:hujun614(胡均) 
    我们又回到了那遥远的DOS-C时代,但真的管用
      

  10.   

    对CString类型来说它的空间大小是未定的所以你在 struct List* m_pList=(struct List*)malloc(sizeof(List));时候它的空间实际是未分配的
    我同意hujun614(胡均)的做法!
      

  11.   

    CString 类有其自己的一套内存管理机制。
    因此,要想对CString类的对象进行赋值(或其他)操作必须先初始化(在CString类的构造函数中)
    而本例中,CString类对象的构造函数没有被执行(用malloc只是分配空间,只有用new才会再分配空间之后调用其构造函数,此处的构造函数由编译器生成,其内部将会执行CString对象的构造函数)
      

  12.   

    zcj_csdn 說的對
    因為C++ new 一個物件時, 會同時調用建构函數, 但malloc不會, 所以你的list中的兩個CString都可以被認為是未初始化的, 看看以下的例子
    以下假設是CString的賦值號重載
    void operator = (LPCTSTR s)
    {
      if (m_lpBuffer != NULL)
         delete m_lpBuffer;  // * 釋放現有的內存
      m_lpBuffer = new TCHAR[strlen(s) + 1];
      strcpy(m_lpBuffer, s);
    }
    就是*的那句出錯了, 因為m_lpBuffer未初始化, m_lpBuffer != NULL, 所以delete它, 就這樣出錯了