【发布时间】:2017-03-24 03:00:15
【问题描述】:
我已经用 C++ 编程了一段时间,但我只是在学习 C。 我正在尝试以下代码试图了解 realloc 的行为 这是我的结构
struct foo{
int a;
int b;
};
这就是我使用它的方式。最初我想创建一个大小为 2 的数组。(我设法做到了)。然后我想将同一个数组的大小增加到 3 保留它以前的内容,所以我使用 realloc 。这是我的代码
//Create array of size 2
struct foo* farry = malloc(2 * sizeof(struct foo));
farry[0].a =1;
farry[1].a =2;
for(i=0 ; i<=(sizeof(farry)/sizeof(farry[0])) ; i++)
{
printf("Value %d \n",farry[i].a );
}
printf("-----Increasing the size of the array \n");
//Increase the size
int oldsize = sizeof(farry)/sizeof(farry[0]);
farry = realloc(farry, (oldsize+1) * sizeof(struct foo));
printf("new size is %d \n",sizeof(farry)/sizeof(farry[0]) );
farry[2].a =3;
for(i=0 ; i<=(sizeof(farry)/sizeof(farry[0])) ; i++)
{
printf("Value %d \n",farry[i].a );
}
这是我得到的输出
Value 1
Value 2
-----Increasing the size of the array
new size is 1
Value 1
Value 2
我期待新尺寸是 3 并打印 1,2,3 但它的新尺寸是 1 为什么会这样?在上述情况下,旧尺寸和新尺寸相同。如果有人能解释我可能遗漏了什么或做错了什么,我将不胜感激
【问题讨论】: