ZH_______ 2017-04-18 13:04 采纳率: 0%
浏览 1108

求助 关于delete[]的char *问题,在重载操作符"=", 程序崩溃。希望大家帮忙一起探讨下

#include "stdafx.h"
#include
#include

int strLen(char * pSrc)
{
if (nullptr == pSrc)
{
return 0;
}
int nLen = 0;
char * pTemp = pSrc;
while (*pTemp != '\0')
{
nLen++;
pTemp++;
}
return nLen;
}

char * strCopy(char * dest, const char * src)
{

if (dest == nullptr || src == nullptr)
{
    return nullptr;
}

if (dest == src)
{
    return dest;
}
char * tmp = dest;
while (*src != '\0')
{
    *tmp++ = *src++;
}
return dest;

}

char * strCat(char * pDst, char * pSrc)
{
if (pDst == nullptr || pSrc == nullptr)
{
return nullptr;
}
char * pTemp = pDst + strLen(pDst);
while (*pSrc != '\0')
{
*pTemp++ = *pSrc++;
}
*pTemp = '\0';
return pDst;
}

class String
{
public:
String(char *pData = nullptr)
{
if (nullptr == pData)
{
m_pChar = new char[1];
assert(nullptr != m_pChar);
m_pChar = '\0';
}
else
{
m_pChar = new char[strLen(pData) + 1];
assert(nullptr != m_pChar);
memset(m_pChar, 0, strLen(m_pChar));
strCopy(m_pChar, pData);
}
}

~String()
{
    if (nullptr != m_pChar)
    {
        delete[] m_pChar;
        m_pChar = nullptr;
    }
}

String(const String &Other)
{
    m_pChar = new char[strLen(Other.m_pChar) + 1];
    assert(nullptr != m_pChar);
    memset(m_pChar, 0, strLen(m_pChar));
    strCopy(m_pChar, Other.m_pChar);
}
const String& operator =(const String &Other)
{
    if (this == &Other)
    {
        return *this;
    }
    delete[] m_pChar;
    m_pChar = new char[strLen(Other.m_pChar) + 1];
    assert(nullptr != m_pChar);
    memset(m_pChar, 0, strLen(m_pChar));
    strCopy(m_pChar, Other.m_pChar);
    return *this;
}

private:
char * m_pChar;
};

int _tmain(int argc, _TCHAR* argv[])
{
String str = "123";
str = "456";
return 0;
}

  • 写回答

1条回答 默认 最新

  • ZH_______ 2017-04-18 13:01
    关注

    在函数const String& operator =(const String &Other)中,delete[] m_pChar;这一句崩溃。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog