gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:47:40 25 4
gpt4 key购买 nike


当我运行函数 handleRequestWithParams(..) 几次时,我的微 Controller (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;
}

最佳答案

您使用newnew T[] 获取的每一 block 内存都必须使用deletedelete[]相应地。

否则你正在泄漏内存。


也就是说,我强烈建议您自己处理new/delete
使用 std::vector ,或来自 Dynamic memory management 的类而不是 c++ 标准库。

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

关于C++ 数组/指针泄漏内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35346029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com