我需要学校作业的帮助,特别是调整分配给指针的内存量,没有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
,但允许使用malloc
和free
,则可以用以下效率较低的顺序替换调用:
void *newData = malloc(newSize);
memcpy(newData, oldData, oldSize);
free(oldData);
在内部,realloc
做同样的事情,但它做得更有效。与用户程序不同,realloc
知道动态内存块的实际大小,因此它检查newSize <= actualSize
是否避免重新分配。当actualSize
不够用时,realloc
做同样的事情。realloc
有额外的逻辑来处理需要缩小大小的情况,但在您的情况下,这并不适用。