小编Mar*_*rov的帖子

通用环缓冲区

我已经实现了一个通用的环形缓冲区,但我遇到了一些奇怪的结果.首先我成功地推送了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

1
推荐指数
1
解决办法
65
查看次数

C中的多级继承

我想在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

0
推荐指数
1
解决办法
84
查看次数

标签 统计

c ×2