【发布时间】:2020-08-15 12:19:13
【问题描述】:
假设我有这个功能:
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;
}
据说第一个(老师的)是正确的,第二个(我的)不是因为我做了不需要的额外步骤。
我想知道它为什么会抛出分段错误,它应该这样做还是函数写得好?
【问题讨论】:
-
一般来说第一个不好。这些变量的命名会导致一些令人困惑的范围问题。你的更好,但你忘记检查
realloc的结果是否为NULL。 -
第一个功能是教师?这是不对的。您确定
ptArr在函数内部再次声明为局部变量吗? -
@RetiredNinja 哦.. 我明白你的意思,不,那是我的错,将编辑问题。但仍然没有它,它会出现故障
标签: c memory-management segmentation-fault realloc memory-reallocation