C ++数组/指针泄漏内存

时间:2016-02-11 17:25:18

标签: c++ memory-leaks esp8266


当我运行函数handleRequestWithParams(..)几次时,我的微控制器(ESP8266)上的RAM内存耗尽。
我不确定我应该删除“paramsNames”,“paramsValues”和“值”,或者我应该以其他方式创建这个数组?

struct RequestStructure {
    int paramsCount;
    String* paramsNames;
};

void Requests::handleRequestWithParams(RequestStructure requestStructure) {
    const int PARAMS_COUNT = requestStructure.paramsCount;

    String* paramsNames = requestStructure.paramsNames;
    String* paramsValues = readParamsValues(paramsNames, PARAMS_COUNT);

    _server.send(200, TYPE_TEXT, response(paramsNames[0], paramsValues[0]);

    //delete paramsNames;
    //delete paramsValues;
}

String* Requests::readParamsValues(String* paramsNames, int count) {
    String* values = new String[count];
    for (int i = 0; i < count; i++) {
        values[i] = server.arg(paramsNames[i].c_str());
    }
    return values;
}

1 个答案:

答案 0 :(得分:0)

您使用newnew T[]获取的每一段记忆都必须相应地使用deletedelete[]删除。

否则你会泄漏记忆。

那就是说,我强烈反对自己处理new / delete。 请改用std::vector或c ++标准库的Dynamic memory management中的类。

这些提供了清晰的语义,如何在代码工作流的分布式部分之间传输动态存储的所有权,并在引用不再存在时自动管理删除。