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