c++中字符串相关函数的内存泄漏

Memory leak with string related function in c++

本文关键字:内存 泄漏 函数 字符串 c++      更新时间:2023-10-16

下面的函数在我的代码中导致内存泄漏。当它出问题的时候,你能帮帮我吗?我认为当我们使用字符串时应该没有泄漏,因为STL会关心内存堆分配和重新分配。请给我一些直观的理由

int CProcessMgr::readField(std::string currlocline)
{   
    //std::string currlocline = currline;
    if((currlocline.find('[') != -1) && (currlocline.find(']') != -1))
    {
        currlocline.erase(std::remove(currlocline.begin(), currlocline.end(), '['),       currlocline.end());
        currlocline.erase(std::remove(currlocline.begin(), currlocline.end(), ']'), currlocline.end());
        size_t loc = currlocline.find(" ");     
        m_inpData.updateDate = currlocline.substr(0, loc);
        m_inpData.updateTime = currlocline.substr(loc+1);
        //GetTimeValues(currlocline.c_str());
    }
    else if(currlocline.find(SYMBOL_ROW) != -1)
    {
        size_t size = currlocline.find(":");
        if(size != -1)
        {
            string currticker = currlocline.substr(size+1);
            size = currticker.find("bk.HKd");
            if(size != -1)
            {
                m_inpData.ticker = currticker.substr(0, size);
                m_inpData.ticker.append(".HK");
            }
            else 
                m_inpData.ticker = currticker;
        }       
    }           
    else if(currlocline.find(TOTAL_VOL) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.totalVolume = atol(currlocline.substr(size+1).c_str());
    }
    else if(currlocline.find(BID_ROW) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.bidPrice = atof(currlocline.substr(size+1).c_str());
    }
    else if(currlocline.find(BID_SIZE) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.bidsize = atoi(currlocline.substr(size+1).c_str());
    }
    else if(currlocline.find(ASK_ROW) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.askPrice = atof(currlocline.substr(size+1).c_str());
    }
    else if(currlocline.find(ASK_SIZE) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.asksize = atoi(currlocline.substr(size+1).c_str());
    }
    else if(currlocline.find(ROW80_3_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_3 = currlocline.substr(size+1).c_str();
    }
    else if(currlocline.find(ROW80_4_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_4 = currlocline.substr(size+1).c_str();
    }
    else if(currlocline.find(ROW80_5_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_5 = currlocline.substr(size+1).c_str();
    }
    else if(currlocline.find(ROW80_6_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_6 = currlocline.substr(size+1).c_str();
    }
    else if(currlocline.find(ROW80_7_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_7 = currlocline.substr(size+1).c_str();
    }
    else if(currlocline.find(ROW80_8_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_8 = currlocline.substr(size+1).c_str();
    }
    else if(currlocline.find(ROW80_9_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_9 = currlocline.substr(size+1).c_str();
    }
    else if(currlocline.find(ROW80_10_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_10 = currlocline.substr(size+1).c_str();
    }
    else if(currlocline.find(ROW80_11_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_11 = currlocline.substr(size+1).c_str();
    }
    else if(currlocline.find(ROW80_12_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_12 = currlocline.substr(size+1).c_str();
    }
    else if(currlocline.find(ROW80_13_TEXT) != -1)
    {
        //update previous record info and store it into the map.
        size_t size = currlocline.find(":");
        m_inpData.row_13 = currlocline.substr(size+1).c_str();
    }
    return 0;
}

您好,我已经解决了这个问题,感谢您到现在为止的回复。

问题与结构的memset有关。由于这个memset,每次我访问这个代码块时,它们都会创建内存。我要删除这个语句,它看起来很好