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

C++ C++;数组/指针泄漏内存,c++,memory-leaks,esp8266,C++,Memory Leaks,Esp8266,当我运行函数HandlerRequestwithParams(..)几次时,我的微控制器(ESP8266)上的RAM内存就用完了 我不确定我是否应该删除“paramsNames”、“paramsValues”以及可能的“values”,或者我是否应该以其他方式创建此数组 struct RequestStructure { int paramsCount; String* paramsNames; }; void Requests::handleRequestWithParams


当我运行函数HandlerRequestwithParams(..)几次时,我的微控制器(ESP8266)上的RAM内存就用完了
我不确定我是否应该删除“paramsNames”、“paramsValues”以及可能的“values”,或者我是否应该以其他方式创建此数组

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;
}
struct请求结构{
int ParamScont;
字符串*参数;
};
void Requests::HandlerRequestWithParams(RequestStructure RequestStructure){
const int PARAMS_COUNT=requestStructure.paramscont;
String*paramsNames=requestStructure.paramsNames;
String*paramsValues=readParamsValues(paramsNames,PARAMS_COUNT);
_send(200,TYPE_TEXT,response(paramsNames[0],paramsValues[0]);
//删除参数;
//删除参数值;
}
String*Requests::ReadParamsValue(String*paramsNames,int count){
字符串*值=新字符串[计数];
for(int i=0;i
必须使用
delete
delete[]相应地删除通过
new
new T[]获得的每一块内存

否则就是内存泄漏


也就是说,我强烈反对自己处理
new
/
delete

使用或从C++标准库中的类替代.< /P>
这些提供了清晰的语义,说明了动态存储的所有权将如何在代码工作流的分布式部分之间转移,并在引用不再存在时自动管理删除。

您需要取消分配动态分配的内存。问题是哪个函数是实现这一点的最佳位置。这不能解决问题红色,但看不到代码的其余部分。如果可以,请发布一个。我认为内存泄漏只发生在ReadParamsValue(…)因为“new”,我不知道如何删除我必须从这个函数返回的值。房间里的大象:std::vector?@SnowBizz你应该检查
PARAMS_COUNT
是否是
>0
。当前你的代码在
发送
调用中调用未定义的行为,如果
PARAMS_COUNT==0
@SnowBizz你能使用
吗>std::vector
在您的应用程序中(因为您声明您正在使用微控制器)?是的,但我只使用一个“new”,无法删除它,因为我返回此值。@SnowBizz您可以在分配它的函数之外删除它。但这也取决于服务器发送()
实际上是这样。如果该函数想要在上异步运行,您将遇到问题。在后一种情况下,
\u服务器应负责删除。这是一种同步方法。@SnowBizz是您的代码吗?然后在那里提供删除。因此添加一行:
delete[]paramsValues;
handleRequestWithParams(..)的末尾,
是否足够?