我有点困惑,似乎我的流量是正确的,但我得到了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;
}
答案 0 :(得分:3)
在第5行中,您在堆栈上创建一个局部变量,当函数返回它时,作用域结束并且对象内存空闲。因此,如果您稍后使用该地址,则会出现seg-fault