懒惰的羊 2021-04-21 23:23 采纳率: 0%
浏览 194

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;
    }
}

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

 

 

 

 

 

  • 写回答

3条回答 默认 最新

  • Damon_SuperCode 2021-04-22 09:39
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 fastreport怎么判断当前页数
  • ¥15 Kylin-Desktop-V10-GFB-Release-JICAI_02- 2207-Build14-ARM64.iso有没有这个版本的系统啊
  • ¥15 能不能通过蓝牙将传感器数据传送到手机上
  • ¥20 100元python和数据科学实验项目
  • ¥15 根据时间在调用出列表
  • ¥15 R 包chipseeker 安装失败
  • ¥15 Veeam Backup & Replication 9.5 还原问题
  • ¥15 vue-print-nb
  • ¥15 winfrom的datagridview下拉框变成了黑色,渲染不成功
  • ¥20 利用ntfy实现短信推送