char *c = new char(60);
c = m_engletter.GetBuffer(0);
c[m_engletter.GetLength()] = '\0';
m_engletter = c;
UpdateData(FALSE);
delete []c;
c = m_engletter.GetBuffer(0);
c[m_engletter.GetLength()] = '\0';
m_engletter = c;
UpdateData(FALSE);
delete []c;
解决方案 »
- CString 和 char* 之间的问题 vs2010中
- 对SOCKET SEND函数在网上的详细解释之一求分析
- SetWindowExtEx 和SetViewportExtEx 的问题
- 这年头!看来不给高分不行呀!这年头!哎!
- 最大化Doc/View窗口, 全屏显示后, 恢复不正常, 窗口消失
- 怎样写这样的SQL语句?
- 急求,bmp图像分类算法,帮帮忙吧
- 300分再急问:如何将一系列2560*1920的JPG图像转换为100*75的BMP图像,然后保存到一个文件中????
- 请问如何初始化全局变量?
- 请高手帮助,急,关于编写MFC Activex控件
- 怎样改变CListCtrl中的第一列
- 用VC++6.0编程出现如下错误。。不知如何解决,请大家帮忙。。
->
char *c = new char[60];
c[m_engletter.GetLength()] = '\0';
m_engletter = c;
UpdateData(FALSE);
delete []c; //這裡的刪除不在是最初的c的地址,這個操作應該是刪除m_engletter,而m_engletter是CString類型,不能用delete. 所以出現了錯誤了!將delete []c 去幹就不用有了。
LitterMonster(小尾巴)说的对,不delete,但我申请的内存总要释放的,如果不能delete []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; //釋放之前申請的內存 ~~
char *c = new char()
就是没有必要的,这里只要一个指针就好了,不要忘记了ReleaseBuffer(); 这样就好了
2.CString的内存是自己管理的
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.