我有一个关于 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仍然指向同一个地址,但内容改变了。
指针a仍然指向同一个地址,但内容改变了。
那是因为realloc()
可能首先尝试增加块的大小a
指着。但是,它可以分配一个新块,将数据(或适合的尽可能多的数据)复制到新块,然后释放旧块。你真的不应该使用a
打电话后b = realloc(a, 200000 * sizeof(int))
自从realloc
调用可能会将块移动到新位置,留下a
指向不再分配的内存。使用b
反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)