CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

[求助]:还是关于内存动态分配和释放的问题~!

楼主realorg()2006-06-02 23:48:34 在 C/C++ / C++ 语言 提问

[求助]:还是关于内存动态分配和释放的问题~!  
     
  偶有如下的设计代码:  
  class   myClass  
  {  
            public:  
                        myClass();  
                        bool   myFunction();  
                        ~myClass();  
            private:  
                        char   *   m_szMyStr;  
  }  
  myClass::myClass()  
  {  
            char   *m_szMyStr=new   char[256];  
  }  
  myClass::~myClass()  
  {  
            delete   []   m_szMyStr;  
  }  
  bool   myClass::myFunction()  
  {  
            char   *   pStr=new   char[256];  
            ......//此处   pStr得到了一个已知的字符串  
                        //如使用   GetModuleFileName(NULL,pStr,256);  
            //现在偶想给   类数据成员赋值为   pStr;结果如下方法都不可行。  
            //方法一:  
            for(unsigned   int   i=0;i<256;i++)  
                          if(pStr[i]=='\0')  
                                          m_szMyStr[i]=pStr[i];               //出现错误,无法访问内存   C0000005  
            //方法二:   出现错误,无法访问内存   C0000005  
            strcpy(m_szMyStr,pStr);  
            //方法三:  
            m_szMyStr=pStr;                       //如果使用这个,会内存泄漏  
                          //如果使用方法三,就不能   delete   pStr了。  
                        delete   []pStr;  
   
                        //请问,这种思路忽略了什么?为何会无法访问内存呢?偶感觉好像是无法访问类的数据成员   m_szMyStr   。究竟这样写,问题出在哪里?  
  }  
   
  问题点数:10、回复次数:9Top

1 楼zzstephen(渣渣)回复于 2006-06-03 00:08:38 得分 0

你这里写错了吧?重新又定义了一个局部变量  
  myClass::myClass()  
  {  
            char   *m_szMyStr=new   char[256];  
  }Top

2 楼A_B_C_ABC(黄瓜@YouCanDoIt)回复于 2006-06-03 01:57:52 得分 0

修改构造函数  
  myClass::myClass()  
  {   //char   *m_szMyStr=new   char[256];  
            m_szMyStr=new   char[256];  
  }  
     
  //方法一:  
    for(unsigned   int   i=0;i<256;i++)  
  {  
            m_szMyStr[i]=pStr[i];  
            if(pStr[i]=='\0')   break;                                        
  }    
  delete   []pStr;  
     
  //方法二:    
  strcpy(m_szMyStr,pStr);  
  delete   []pStr;  
   
  //方法三:  
  delete     []m_szMyStr;  
  m_szMyStr=pStr;                        
  Top

3 楼Bruce_Song(自强不息)回复于 2006-06-03 08:38:11 得分 0

楼上正解,方法三pStr不需要删除.Top

4 楼MagicCarmack(MagiC++)回复于 2006-06-03 10:09:17 得分 0

补充一点就是class完了之后是有分号滴。。。。哈哈Top

5 楼realorg()回复于 2006-06-03 18:26:11 得分 0

那A_B_C_ABC(黄瓜)   说的方法三中,还会不会泄漏内存呢?Top

6 楼yxsxl827()回复于 2006-06-03 19:14:10 得分 0

LZ可以考虑是否用深拷贝呢????Top

7 楼Bruce_Song(自强不息)回复于 2006-06-03 19:56:58 得分 0

回复人:realorg()    
          那A_B_C_ABC(黄瓜)   说的方法三中,还会不会泄漏内存呢?  
   
  不会。Top

8 楼yzhg_cgl(Little Fish)回复于 2006-06-08 00:51:55 得分 0

分清局部变量与类的成员。Top

9 楼zzzace(怀念以前的小吃)回复于 2006-06-08 11:28:31 得分 0

没什么可说的了,嘿嘿,路过  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:realorg

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo