【发布时间】:2017-05-07 17:53:52
【问题描述】:
我的代码有问题。 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,但它仍然失败。奇怪的是,它在第一次调用时没有失败,但在第二次调用时却失败了。我读过其他类似的问题,但我是初学者,我不明白。
提前致谢!
【问题讨论】:
-
未能包含
<stdlib.h>以及对realloc的结果的强制转换使一切变得不同。 -
@pmg 我已经包含了
但我不明白 realloc 有什么问题 -
如果不包含
<stdlib.h>,编译器假定realloc返回一个int,然后通过强制转换将该int 转换为指针。首先:malloc返回一个指针并将该指针解释为 int 可能会更改值。第二:将(无效的)int 转换为指针是无效的转换;强制转换使编译器在没有警告的情况下接受它。