当我运行函数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;
}
答案 0 :(得分:0)
您使用new
或new T[]
获取的每一段记忆都必须相应地使用delete
或delete[]
删除。
否则你会泄漏记忆。
那就是说,我强烈反对自己处理new
/ delete
。
请改用std::vector
或c ++标准库的Dynamic memory management中的类。
这些提供了清晰的语义,如何在代码工作流的分布式部分之间传输动态存储的所有权,并在引用不再存在时自动管理删除。