C - 不使用 realloc 的动态大小的结构指针数组?

C - Dynamically sized array of struct pointers without using realloc?

我需要学校作业方面的帮助,特别是在不重新分配的情况下调整为指针分配的内存量。

我的程序中有以下声明。

struct GraphicElement
{
    enum{ SIZE = 256 };
    unsigned int numLines;
    Line* pLines;
    char name[SIZE];
};

typedef struct 
{
    unsigned int numGraphicElements;
    GraphicElement* pElements;
}VectorGraphic;

VectorGraphic Image;

随着程序的运行,我将向 pElements 添加更多的 GraphicElements。

例如,在 5 次迭代之后,pElements 的内存应该是这样的:

[图形元素 0][图形元素 1] ... [图形元素 4]


对于函数 AddGraphicElement(VectorGraphic* vg) 我有这段代码(为了便于阅读删除了一些行):

vg->pElements = (GraphicElement*)realloc(vg->pElements, sizeof(GraphicElement)*(vg->numGraphicElements+1));

//Then I assign inputs from user into the members of the struct at vg->pElements[vg->numGraphicElements]

vg->numGraphicElements++;

这行得通,但是根据我教授的指示,我只被允许使用 malloc 和 free,不能使用 realloc。遗憾的是,我完成这项工作的唯一方法是使用 realloc。

任何人都可以指出正确的方向来仅使用 malloc 来实现它吗?

谢谢!

如果不允许使用 realloc,但允许使用 mallocfree,则可以将调用替换为以下效率较低的序列:

void *newData = malloc(newSize);
memcpy(newData, oldData, oldSize);
free(oldData);

在内部,realloc 做同样的事情,但效率更高。与用户程序不同,realloc 知道动态内存块的实际大小,因此它检查是否 newSize <= actualSize 以避免重新分配。当 actualSize 不足时, realloc 做同样的事情。 realloc 有额外的逻辑来处理需要缩小尺寸的情况,但在您的情况下这不适用。