cout打印动态字符数组

ECEPA_禧戏
  • 552
#include <iostream>
using namespace std;

class mstring
{
public:
    mstring(const char* str)
    {
        length = strlen(str);
        m_char = new char(length + 1);
        
        strcpy_s(m_char, length + 1, const_cast<char*>(str));
    }

    friend ostream& operator<<(ostream& out,const mstring& str)
    {
        if (NULL != str.m_char)
        {
            out << str.m_char;
            return out;
        }
    }

    ~mstring()
    {
        if (m_char != NULL)
        {
            delete m_char;
            length = 0;
        }       
    }

    char* m_char;
    int length;

};

int main()
{
    mstring* mstr = new mstring("Hello World!");
    cout << mstr;

    return 0;
}`

为什么内存会出错???

回复
阅读 1.6k
2 个回答
且行且歌_C
  • 62

首先你创建的mstr没释放,new后面没delete
其次友元函数里面没有覆盖,if要是没进去返回什么呀?
还有就是楼上的 new char() -> new char[]

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏