我已经实现了一个通用的环形缓冲区,但我遇到了一些奇怪的结果.首先我成功地推送了15个整数,但是当我尝试打印到缓冲区的内容时,它打印出一些错误的元素.
首先,我为10个整数分配内存.然后我试图推动15并调整缓冲区的大小到位.也许调整大小是以某种方式打破它,因为没有它它工作正常.
RingBuffer.c
#include<stdlib.h>
#include<string.h>
#include <stdio.h>
#include"RingBuffer.h"
unsigned char RingInit(RingBuffer* buffer, int elemLen, int elemSize, void (*fn)(void*))
{
buffer->dataLen = elemLen;
buffer->dataSize = elemSize;
if( (buffer->data = malloc( buffer->dataSize * buffer->dataLen )) == NULL){
return 1;
}
buffer->head = 0;
buffer->tail = 0;
buffer->elemCount = 0;
buffer->freeFn = fn;
buffer->doResize = 1;
buffer->resizeBy = 2;
return 0;
}
unsigned char RingPush(RingBuffer* buffer, void* elem)
{
if(RingIsFull(buffer)){
if(!buffer->doResize || RingResize(buffer)){
return 1;
}
}
memcpy((buffer->data + (buffer->head*buffer->dataSize)), elem, buffer->dataSize);
buffer->head …Run Code Online (Sandbox Code Playgroud) 我想在C中实现多级继承,其中基类作为指针继承。例如:
typedef struct Shape_s {
int s;
}Shape;
typedef struct Circle_s {
Shape* base;
int c;
}Circle;
typedef struct ColoredCircle_s {
Circle* base;
int cc;
}ColoredCircle;
Run Code Online (Sandbox Code Playgroud)
我想要指针,因为我想让基类成为“私有”,无法访问它。我还想要多态性 - 所有与 Shape 一起使用的函数也必须与派生类一起使用。例如:
shapeDraw(shape);
shapeDraw((Shape*)circle);
shapeDraw((Shape*)coloredCircle);
Run Code Online (Sandbox Code Playgroud)
上面的示例仅适用于一级继承。我不知道如何在更多级别上做到这一点。
c ×2