C通过指针初始化struct和access

时间:2016-07-24 21:15:13

标签: c arrays struct segmentation-fault

我有点困惑,似乎我的流量是正确的,但我得到了Seg。错误(第15行)

标题中的我的结构:

typedef struct ringBuf_t {
    uint32_t data[BUF_CAPACITY];
    int head;
    int tail;
    uint32_t capacity;
} ringBuf_t;

以及我如何使用它:

ringBuf_t *create() {
    ringBuf_t buf = {.capacity = BUF_CAPACITY, .head = 0, .tail = 0};

    return &buf;
}

int push(ringBuf_t *buf, uint32_t item) {
    if (buf->head + 1 == buf->tail) {
        return -1;
    }

    buf->data[buf->head] = item;
    buf->head = (buf->head + 1) % buf->capacity;

    return 0;
}

1 个答案:

答案 0 :(得分:3)

在第5行中,您在堆栈上创建一个局部变量,当函数返回它时,作用域结束并且对象内存空闲。因此,如果您稍后使用该地址,则会出现seg-fault