我的代码有问题。 malloc
工作,在while循环中,realloc()
第一次工作,第二次调用时,它总是失败。
该代码是获取数字素因子的算法的一部分。
int main()
{
int n, in, *ar, len = 0;
scanf("%d", &n);
ar = (int *) malloc(1 * sizeof(int));
while(n % 2 == 0){
ar[len] = 2;
len++;
ar = (int *) realloc(ar, len * sizeof(int));
if(ar == NULL){
printf("Error");
return 1;
}
n /= 2;
}
return 0;
}
我尝试将len
初始化为1,但仍然失败。奇怪的是它在第一次通话时没有失败,但在第二次通话时失败了。我读过其他类似的问题,但我是初学者,我不明白。
提前谢谢!
答案 0 :(得分:6)
在你的程序中,你正在访问一个超出范围的数组。这会导致不确定的行为。
最初,len = 0
时,while
循环:
ar[len] = 2; //ar[0] = 2;
len++; //len = 1
ar = (int *) realloc(ar, len * sizeof(int));
//ar is of size 1
然后在下一次迭代中,len = 1
ar[1] = 2; //you cannot access ar[1] as size of `ar` is only 1.
每次迭代都会继续。为了避免这种情况:
//initialize len to 1
int len = 1;
并在ar[len-1]
循环中使用ar[len]
代替while
。