| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 618 人关注过本帖
标题:析构函数释放出错
只看楼主 加入收藏
王翔
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2015-2-1
结帖率:50%
收藏
已结贴  问题点数:15 回复次数:2 
析构函数释放出错
#include<iostream>

using namespace std;

class CString
{
    char * m_pbuff; //指向字符串的指针
    int m_length; //表示当前字符串的最大允许长度,也就是字符数组的长度
public:
    CString(); //构造函数1,设置为空字符串,m_length=100
    CString(char *src); //构造函数2,在考虑了src的长度后初始化当前对象,m_length >= src的长度 + 1
    CString(char ch); //构造函数3,0号元素赋值为ch, m_length=100
    CString(CString & a);
    int SetString(char *src); //设置字符串,在考虑了src的长度后设置当前对象, m_length >= src的长度 + 1
    friend ostream& operator<<(ostream& Out, const CString& S);  //输出字符串
    ~CString()
    {
        delete []m_pbuff;
    }
};
CString::CString()
{
    m_length = 100;
    m_pbuff = new char[m_length];
    for (int i = 0; i < m_length; ++i)
        m_pbuff[i] = '\0';
   
}
CString::CString(char *src)
{
    m_length = strlen(src) + 1;
    m_pbuff = new char[m_length];
    int i;
    for (i = 0; i < m_length; ++i)
        m_pbuff[i] = src[i];
    m_pbuff[i] = '\0';
}
CString::CString(char ch)
{
    m_length = 100;
    m_pbuff = new char[m_length];
    m_pbuff[0] = ch;
    m_pbuff[1] = '\0';
}
int CString::SetString(char *src)
{
    m_length = strlen(src) + 1;
    m_pbuff = new char[m_length];
    int i;
    for (i = 0; i < m_length; ++i)
        m_pbuff[i] = src[i];
    m_pbuff[i] = '\0';
    return 1;
}
ostream& operator<<(ostream& Out, const CString& S)
{
    Out << S.m_pbuff << endl;
    return Out;
}
CString::CString(CString & a)
{
    m_length = a.m_length;
    m_pbuff = new char[a.m_length];
    int i;
    for (i = 0; i < m_length; ++i)
        m_pbuff[i] = a.m_pbuff[i];
    m_pbuff[i] = a.m_pbuff[i];
}

void main()
{
    CString s1;
    cout << s1;
    s1.SetString("abc1");
    cout << s1;
    CString s2("abc2");
    cout << s2;
    CString s3('a');
    cout << s3;
    CString s4(s2);
    cout << s4;
}
搜索更多相关主题的帖子: include public 字符串 元素 
2015-03-26 21:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:15 
错误和恶习太多,建议你多阅读正经的书,多阅读正经的代码。(好心提醒)

只说你提到的错误吧,
a. 你的那些for之后,i已经出了m_pbuff指向的有效范围,m_pbuff[i] = 当然出错
b. SetString函数起先是不是得将原先的 m_pbuff指向的内存 释放掉?
2015-03-27 08:43
王翔
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2015-2-1
收藏
得分:0 
回复 2楼 rjsp
多谢版主,新手上路,刚开始学C++,没太注意,版主有什么好的书籍推荐吗?不怕难的!
2015-03-27 10:47
快速回复:析构函数释放出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013761 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved