char *c = new char(60);
c = m_engletter.GetBuffer(0);
c[m_engletter.GetLength()] = '\0';
m_engletter = c;
UpdateData(FALSE);
delete []c;

解决方案 »

  1.   

    char *c = new char(60);
    ->
    char *c = new char[60];
      

  2.   

    char *c = new char[60];
      

  3.   

    char *c = new char(60);  //得到最初的c的地址c = m_engletter.GetBuffer(0);  //在這個地方c的地址發生了變化,變成了m_engletter的地址
    c[m_engletter.GetLength()] = '\0';
    m_engletter = c;
    UpdateData(FALSE);
    delete []c;  //這裡的刪除不在是最初的c的地址,這個操作應該是刪除m_engletter,而m_engletter是CString類型,不能用delete. 所以出現了錯誤了!將delete []c 去幹就不用有了。
      

  4.   

    char *c = new char(60)得到的是ASCII码为60的字符
      

  5.   

    以前用的是char *c = new char[60];出现同样的错误,问过同事后说char *c = new char(60);也行,就改了,还不行。
    LitterMonster(小尾巴)说的对,不delete,但我申请的内存总要释放的,如果不能delete []c,我怎样释放我之前申请的内存
      

  6.   

    char *c = new char(60);  //得到最初的c的地址
    char *old_c;      old_c = c;  //記錄下最初的c指針地址c = m_engletter.GetBuffer(0);
    c[m_engletter.GetLength()] = '\0';
    m_engletter = c;
    UpdateData(FALSE);delete []old_c;   //釋放之前申請的內存  ~~
      

  7.   

    最初的分配
    char *c = new char()
    就是没有必要的,这里只要一个指针就好了,不要忘记了ReleaseBuffer();  这样就好了
      

  8.   

    1.原始指针中间丢失了
    2.CString的内存是自己管理的
      

  9.   

    char *c = new char(60);     //c point to new char(60), Don't need new it.
    c = m_engletter.GetBuffer(0);   //because c point to m_engletter.getbuffer , new  char(60) leak.c[m_engletter.GetLength()] = '\0';
    m_engletter = c;
    UpdateData(FALSE);
    delete []c;                //delete []c means delete new char(60),but it have leaked.