C ++内存泄漏使用char *

时间:2014-09-18 18:51:31

标签: c++ pointers memory-leaks

我正在编写一个与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;
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你有你的

char *cstr = new char[data.size() + 1];

和相应的

delete[] cstr;

并正确实施(new[]delete[]匹配) 您的代码中没有其他地方可以在堆上分配内存,而且我也看不到cstr被修改的任何地方。

所有这些都表示您没有内存泄漏,或者至少不在您在此处提交的代码中。

如果你认为你有内存泄漏,你应该确认一下。检查Valgrind的输出(或合适的替代方案)。