簡體   English   中英

malloc和空閑內存泄漏

[英]malloc and free memory leakage

我試圖創建一個具有malloc的類。

  • 該類具有內部結構。
  • 用戶將具有指向該結構的指針,但是他可能不知道該結構,甚至不關心它。

  • 他必須保存指針,並且某些函數將需要該結構的地址。

因此,在庫的標頭中,我執行了以下操作:

#define EELS_MAX_SLOTS 5

class EELS
{

typedef struct{
   //struct difinition ...
}ee_slot_t;

public:
    EELS();
    uint8_t CreateSlot(uint16_t begin_addr, uint16_t length, uint8_t data_length);
    ~EELS();
protected:
private:
    void* _slot_arr[EELS_MAX_SLOTS];
    uint8_t _slot_counter;
}; 

以及執行文件中的代碼:

// default constructor
EELS::EELS()
{
    _slot_counter =0;
} //EELS

uint8_t EELS::CreateSlot(uint16_t begin_addr, uint16_t length, uint8_t data_length){
    if (_slot_counter > EELS_MAX_SLOTS)
        return NULL;

    ee_slot_t* slot_p;
    slot_p = malloc(sizeof(ee_slot_t))
    if (!slot_p)
        return NULL;

    slot_p->begining = begin_addr;
    slot_p->length = length;
    slot_p->counter  = 0; // TODO...init...
    slot_p->position = 0; // TODO...init...

    _slot_arr[_slot_counter] = (void*)slot_p;
    _slot_counter++;
    return _slot_counter;
}
// default destructor
EELS::~EELS()
{
    for (int i=0; i<_slot_counter; i++)
    {
        free((ee_slot_t*)_slot_arr[i]);
    }
}

如您所見,即時消息正在返回指針數組的索引。.因此,在這種情況下(1-6),我將實際地址保存在該指針數組中。

但從您所看到的。 這樣安全嗎? free方法和malloc ..是否存在一些錯誤或內存泄漏?

為什么不向量?

因為它適用於嵌入式系統,並且當前使用的IDE /工具鏈不支持std:vectors。

_slot_counter == EELS_MAX_SLOTS時會發生什么。 所以我認為您應該更改if語句

if (_slot_counter > EELS_MAX_SLOTS)
    return NULL;

if (_slot_counter >= EELS_MAX_SLOTS)
    return 0; // return type is uint8_t, not a pointer

暫無
暫無

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

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