【发布时间】:2020-01-22 16:14:22
【问题描述】:
我正在尝试调试以下代码:
Status ListInsert_Sq(SqLIst *L, int i, LElemType_Sq e)
{
LElemType_Sq *newbase;
LElemType_Sq *p, *q;
if(i<1 || i>(*L).length+1)
return ERROR;
if((*L).length >= (*L).listsize)
{
newbase = (LElemType_Sq*)realloc(LElemType_Sq *)realloc((*L).elem, ((*L).listsiz+LISTINCREMENT)*sizeof(LElemType_Sq));
if(!newbase)
exit(OVERFLOW);
(*L).elem = newbase;
(*L).listsize += LISTINCREMENT;
}
q = &(*L).elem[i-1];
for(p=&(*L).elem[(*L).length-1];p>=q;--p)
*(p+1) = *p;
*q = e;
(*L).length++;
return OK;
}
这里使用--p 正确吗?
具体来说,我想知道列表的最后一个元素是否会被前一个元素移动或覆盖?
谢谢!
【问题讨论】:
-
*(p+1) = *p是一个错误,因为它后面没有分号。 -
嵌套的
realloc()面目全非。 -
像这样调试源代码是一种惩罚练习。请停止写'聪明',(不可调试),代码:(
-
小的语法更正,使您的问题更清楚。添加了更多标签
-
语言中存在
->是有原因的——你应该使用它,因为它使这样的代码更具可读性。虽然我猜这段代码实际上是某种其他语言的某种机器翻译的输出......
标签: c++ c loops for-loop decrement