【发布时间】:2016-08-23 17:34:52
【问题描述】:
我对 realloc 函数有疑问。应用 realloc 函数后旧指针的内容会改变吗? 代码是
main () {
int *a, *b, i;
a = calloc(5, sizeof(int));
for (i = 0; i < 5; i++)
a[i] = 1;
for (i = 0; i < 5; i++)
printf("%d", a[i]);
printf("\n%p\n", a);
b = realloc(a, 200000 * sizeof(int));
if(b == NULL)
printf("error\n");
for (i = 0; i < 5; i++)
printf("%d", a[i]);
printf("\n");
for (i = 0; i < 10; i++)
printf("%d", b[i]);
printf("\n%p %p\n", a, b);
}
输出是
11111
0x2558010
00111
1111100000
0x2558010 0x7f29627e6010
指针a仍然指向同一个地址,只是内容发生了变化。
【问题讨论】:
-
阅读
realloc()规范,也许还有Linux 手册或任何手册。行为并不是真正一致的,这取决于。另外,不要像没有int返回类型的情况下那样做main(),那真的很旧并且不推荐使用c。 -
C 是严格按值传递的!
realloc怎么能改变指针? -
@iharob:我哪一种感觉不一致? C 规范对行为非常清楚。
-
@Olaf 如果可能的话,它可以返回不同的指针或相同的指针,这就是我的意思。我错了吗?
-
@iharob:不,你不是,但那是标准中定义的行为,所以不是不一致,而是正常的。
fread可能返回的数据比请求的少,等等。