我正在编写一个与USB LCD显示器(Storm 5100-0103)通信的程序,到目前为止一切正常,除了我在某个地方有内存泄漏。
mainLoop: while (true) {
// Get the line
std::getline(std::cin,stringIn);
if (stringIn.find("~") == string::npos || stringIn.empty())
{
continue;
}
// split string to get line data and line number
string data;
int lineNo;
// get the data portion
data = stringIn.substr(0,stringIn.find("~"));
// create a string for line number
string lineNoString = stringIn.substr(stringIn.find("~") + 1, stringIn.length());
// get line number
lineNo = atoi(lineNoString.c_str());
// Create a char array to pass to the displaya
char *cstr = new char[data.size() + 1];
std::copy(data.begin(), data.end(), cstr);
cstr[data.size()] = '\0';
// Write line to the display
retval = usbDisplayPtr->DrawString(0, lineNo, 1, cstr, USBDisplayApi::FONT6X16, 3000);
cout << retval + "\n";
delete[] cstr;
}
非常感谢任何帮助。
答案 0 :(得分:0)
你有你的
char *cstr = new char[data.size() + 1];
和相应的
delete[] cstr;
并正确实施(new[]
与delete[]
匹配)
您的代码中没有其他地方可以在堆上分配内存,而且我也看不到cstr被修改的任何地方。
所有这些都表示您没有内存泄漏,或者至少不在您在此处提交的代码中。
如果你认为你有内存泄漏,你应该确认一下。检查Valgrind的输出(或合适的替代方案)。