微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

顺序calloc返回相同的地址

如何解决顺序calloc返回相同的地址

请考虑以下数据结构,以表的形式管理内存缓冲区:

#include <cstdlib>
#include <cstring>
#include <unordered_map>
 
class BufferItem {
    char* data = nullptr;
    size_t data_size = 0;
public:
    BufferItem () = default;
    BufferItem (size_t size) : data_size(size) {
        data = (char*) std::calloc (size,1);
        printf("calloc %p\n",data);
    }
    ~BufferItem () { std::free (data); }
    inline bool ok () { return data != nullptr; }
};
 
class Buffer {
public:
    using key_t = const char*;
private:
    std::unordered_map<key_t,BufferItem> data;
public:
    inline bool exists (key_t key) { return data.find (key) != data.end(); }
    inline bool create (key_t key,size_t size) {
        if (!exists (key)) data[key] = BufferItem (size);
        return data[key].ok();
    }
};

/* somewhere outside */
Buffer buf;
buf.create("ip_buf",16);
buf.create("port_buf",16);

由于某些原因,calloc()返回相同的地址:

calloc 000000000338e800
calloc 000000000338e800

为什么会这样?我使用MinGW64 gcc 10.1.0构建。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。