首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构中的指针放置在两个结构成员上。

结构中的指针放置在两个结构成员上。
EN

Stack Overflow用户
提问于 2019-11-24 13:52:07
回答 1查看 44关注 0票数 2

我试图用C实现一个环形缓冲区。我声明一个带有一些参数的结构ring_buffer,一个指向ring_buffer元素的指针数组,以及一个释放缓冲区元素的回调函数(指针)。

代码语言:javascript
复制
struct ring_buffer
{
    size_t size, count, head;
    void **elems;
    void (*free_callback)(void *p);
};
typedef struct ring_buffer ring_buffer;

此外,我还获得了一个init函数来创建结构的一个新实例。

代码语言:javascript
复制
ring_buffer *init_buffer(const size_t n, void (*f)(void *p))
{
    ring_buffer *buffer = NULL;
    size_t count = 0, head = 0;
    void **elems = NULL;

    if(n <= 0 || f == NULL)
    {
        return NULL;
    }

    buffer = malloc(sizeof(buffer));
    elems = (void**)malloc(n * sizeof(void*));

    *buffer = (ring_buffer){.size = n, .count = count, .head = head, .elems = elems, .free_callback = f};

    return buffer;
}

现在,我遇到了以下问题:在调用init_buffer函数并创建新结构之后,回调函数的指针被放置在结构的free_callback成员和elems数组的第一个索引上!意思是free_callback == elems[0]

我对此感到非常困惑,因为我为整个数组和结构分配了足够的空间,所以为什么free_callback指针与数组的第一个索引重叠。

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-24 14:06:42

代码语言:javascript
复制
buffer = malloc(sizeof(buffer));

您分配的存储空间的大小为指针,而不是环形缓冲区。请重写:

代码语言:javascript
复制
buffer = malloc(sizeof(ring_buffer))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59018358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档