我使用声明和插入结构的文件。
typedef struct {
uint8_t * ringBuffer;
size_t head;
size_t tail;
size_t capacity;
bool full;
} RingBuffer;
static inline void ringBufferInit(RingBuffer* ringBuffer)
{
ringBuffer = (RingBuffer *) malloc(sizeof(RingBuffer));
//ringBuffer->ringBuffer = buffer;
ringBuffer->capacity = 128;
printf("%d \n", ringBuffer->capacity);
}我调用这个函数的文件:
int main()
{
testRingBufferPushPopSingle();
}
void testRingBufferPushPopSingle()
{
RingBuffer ringBuffer;
ringBufferInit(&ringBuffer);
size_t a = (ringBuffer->capacity);
printf("%d \n", a);
}问题是,似乎在主函数中指针没有更新,因为程序打印。
128
2125407052
只有128个值(在分配块中读取是正确的)。
知道我做错什么了吗?谢谢!
发布于 2020-11-08 09:36:11
函数ringBufferInit没有意义。在函数testRingBufferPushPopSingle中,您已经创建了一个类型为RingBuffer的对象。
RingBuffer ringBuffer;因此,ringBufferInit需要做的是初始化已经创建的对象ringBuffer的数据成员。
它可以看起来像下面的方式
static inline void ringBufferInit(RingBuffer* ringBuffer)
{
//ringBuffer->ringBuffer = buffer;
ringBuffer->capacity = 128;
printf("%d \n", ringBuffer->capacity);
}否则在函数内
static inline void ringBufferInit(RingBuffer* ringBuffer)
{
ringBuffer = (RingBuffer *) malloc(sizeof(RingBuffer));
//ringBuffer->ringBuffer = buffer;
ringBuffer->capacity = 128;
printf("%d \n", ringBuffer->capacity);
}您更改了它的局部变量ringBuffer (指针类型为RingBuffer *),该变量在退出函数后将不活动。
https://stackoverflow.com/questions/64736091
复制相似问题