簡體   English   中英

C ++數組/指針泄漏內存

[英]C++ array/pointer leak memory


幾次運行handleRequestWithParams(..)函數時,我的微控制器(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;
}

您必須使用deletedelete[]相應地刪除使用newnew T[]獲取的每條內存。

否則,您將泄漏內存。


就是說,我強烈不鼓勵您處理new / delete自己的事情。
請使用std::vector或c ++標准庫的動態內存管理中的類。

這些提供了清晰的語義,說明如何在代碼工作流的分布式部分之間轉移動態存儲的所有權,並在引用不存在時自動管理刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM