假设我有这个功能:
void arrayExtendDouble(int **ptArr, int *size)
{
*ptArr = realloc(*ptArr, (*size * 2) * sizeof(int));
for(int i = (*size * 2) - 1; i >= *size; i--)
ptArr[i] = fib(i); //this will throw SEG FAULT
*size *= 2;
}
注意:我是一名学生,这是老师给出的有效解决方案。
现在,我可以使这项工作的唯一方法是这样的:
void fibArrayExpand(int **ptArr, int *size)
{
int *ptArrNew = realloc(*ptArr, (*size * 2) * sizeof(int));
for(int i = (*size * 2) - 1; i >= *size; i--)
ptArrNew[i] = fib(i);
*size *= 2;
*ptArr = ptArrN;
}
据说第一个(老师的)是正确的,第二个(我的)不是因为我做了不需要的额外步骤。
我想知道为什么它会引发分段错误,是应该这样做还是函数写得好?