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



我需要学校作业的帮助,特别是调整分配给指针的内存量,没有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的内存应该是这样的:

[GraphicElement 0][GraphicElement 1]…[GraphicElement 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有额外的逻辑来处理需要缩小大小的情况,但在您的情况下,这并不适用。

相关内容

  • 没有找到相关文章

最新更新