c++中字符串相关函数的内存泄漏
Memory leak with string related function in c++
下面的函数在我的代码中导致内存泄漏。当它出问题的时候,你能帮帮我吗?我认为当我们使用字符串时应该没有泄漏,因为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,每次我访问这个代码块时,它们都会创建内存。我要删除这个语句,它看起来很好
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏