VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 862|回复: 3

关于函数返回指针的删除问题

[复制链接]
12_avatar_middle
最佳答案
0 
online_vip 发表于 2016-12-12 00:55:17 | 显示全部楼层 |阅读模式
本帖最后由 litangsong 于 2016-12-16 01:24 编辑

PTCHAR  CbxqtDlg:: HuoQuBenDiText (LPCTSTR bendfile ) //获取本地文本资料
{      CStdioFile Cf;       

                if (Cf.Open(bendfile,CFile::modeReadWrite))//成功打开
                {
                        PCHAR hpA = new char[ (UINT)Cf.GetLength()+2];        //创建动态数组
                        Cf.Read(hpA,(UINT)Cf.GetLength());
                        USES_CONVERSION;
                        PTCHAR hpT = A2W(hpA);
                                                                          //delete [] hpA;        //删除动态数组 在外部删除
                        Cf.Close();//关闭
                        return  hpT;
                }else
                {  AfxMessageBox(_T("找不到加载文件") );
                ::SendMessage(AfxGetMainWnd()->m_hWnd, WM_CLOSE, 0, 0);                  
                return NULL ;
                }
  
}
void  CbxqtDlg:: LoadText ()//初始化
{   
   PTCHAR str =  HuoQuBenDiText ( _T(".\\sys\\Date.txt") );
   

   delete [] str;       


问题描述:
只要执行 delete [] str; 这个就报错
难道在另一个函数里申请的堆上的空间在外面不可以释放吗
在 DEBUG 下弹出错误,在RELEASE 下正常,且2个模式下生成的EXE也是一样的情况。一般写程序的时候是在调试模式下还是在发布模式下写的  ,2种模式的效果有时会生成莫名其秒的错误





上一篇:cstring转float保留如何精度
下一篇:使用C++ 设置打印机“高级”选项
51_avatar_middle
最佳答案
11 
online_admins 发表于 2016-12-12 16:19:41 | 显示全部楼层
不是应该 return hpA 吗,为什么要 return hpT 呢?你对 hpT 进行 delete 肯定报错啊
12_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2016-12-12 18:06:40 | 显示全部楼层
Syc 发表于 2016-12-12 16:19
不是应该 return hpA 吗,为什么要 return hpT 呢?你对 hpT 进行 delete 肯定报错啊

首先感谢 SYC老师的回复!

根据你的指点,我修改了下,可以顺利得到了就是要把宽窄放在外面就可以了。代码就没有问题了  。我们常常会操作或对字符串的加工,好了以后都要返回加工好的字符串型。老师有什么好办法和格式吗?如不要外面转换宽窄和删除申请的堆空间。这样多次调用的话,代码量会大很多



PCHAR  CbxqtDlg:: HuoQuBenDiText (LPCTSTR bendfile ) //获取本地文本资料
{      CStdioFile Cf;        

                if (Cf.Open(bendfile,CFile::modeReadWrite))//成功打开
                {
                        PCHAR hpA = new char[ (UINT)Cf.GetLength()+2];        //创建动态数组
                        Cf.Read(hpA,(UINT)Cf.GetLength());
                        Cf.Close();//关闭
                        return  hpA ;
                }else
                {  AfxMessageBox(_T("找不到加载文件") );
                ::SendMessage(AfxGetMainWnd()->m_hWnd, WM_CLOSE, 0, 0);                  
                return NULL ;
                }
  
}
void  CbxqtDlg:: LoadText ()//初始化
{   
   PCHAR str =  HuoQuBenDiText ( _T(".\\sys\\Date.txt") );
                         USES_CONVERSION;
                        PTCHAR hpT = A2W(hpA);
                     AfxMessageBox(hpT);                                                     

   delete [] str;        

51_avatar_middle
最佳答案
11 
online_admins 发表于 2016-12-12 18:50:05 | 显示全部楼层
litangsong 发表于 2016-12-12 18:06
首先感谢 SYC老师的回复!

根据你的指点,我修改了下,可以顺利得到了就是要把宽窄放在外面就可以了 ...

那就先转换好了之后,delete 原来 new 出来的,之后 return 转换好的,总之保证 new 和 delete 成对使用就可以了
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-12-12 21:13

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表