关于顺序表插入时若内存已满分配新空间的问题
if(L.length>=L.listsize) /* 当前存储空间已满,增加分配 */
{
newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
return Error; /* 存储分配失败 */
L.elem=newbase; /* 新基址 */
L.listsize+=LISTINCREMENT; /* 增加存储容量 */
}
中间为什么不直接写成如下的形式,而要引入一个newbase呢?
L.elem=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!L.elem)
return Error;
现实中现在很难遇到真的内存耗尽的情况了。
作者这么写,也许是希望即便没有分配成功,也不破坏原来老的内存指针吧。
这样做的目的,是生成新的空间失败时,而不影响原来已有的顺序表空间。