QT 利用toStdString()将QString 转换成char*时出现段错误

刚接触QT在,在将QString转char*时出现段错误,编译正常,偶尔运行时提示:“HEAP: Free Heap block 14a7bdb8 modified at 14a7bdcc after it was freed”
通过debug锁定问题出现在QStringtoByte函数;调用如下:
char *p = nullptr;    
TypeCast tc;
p = tc.QStringtoByte("aabbccdd");

相关函数如下:

char* TypeCast::QStringtoByte(QString cStrData)

{//最后锁定这个函数出现段错误
    qint32 size = cStrData.size();
    if (size > ptrSize) return nullptr;
    std::string str = cStrData.toStdString();
    pDat = (char*)str.c_str();
 
    for (qint32 i=0, j=0; i<size/2; i++)
    {
        pDat[i] = (ChartoInt(pDat[j])<<4) | ChartoInt(pDat[j+1]);
        j += 2;
    }
 
    for (qint32 i=size/2; i<size; i++)
    {
        pDat[i] = '\0';
    }
 
    return pDat;
}
 
char TypeCast::ChartoInt(char cData)
{
    if (cData >= '0' && cData <= '9') return cData-'0';
    if ((cData >= 'A' && cData <= 'F') || (cData >= 'a' && cData <= 'f')) return cData -= 0x37;
    return cData;
}
TypeCast::TypeCast(int size)
{
    pDat = new char(size);
    if (pDat == nullptr) qDebug()<<"typeCast new err!\r\n";
    ptrSize = size;
}
TypeCast::~TypeCast()
{
    if (pDat != nullptr)
    {
        delete[] pDat;
        pDat = nullptr;
    }
}

网上搜索了有类似的,大部分是临时变量生存周期造成的,跟我这个情况不太一样,一直想不通,我这里申请了内存,还没进行释放,哪里会造成段错误?望高手指点下

 

 

 

 

 

Typecast 实例化时没有传参啊?构造函数重载了吧?

不是重载问题,默认参数4096,也试过实例化时传参,也是一样的现象

不是重载问题,默认参数4096,也试过实例化时传参,也是一样的现象