我已经用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,为什么呢?在上述情况下,旧尺寸和新尺寸是相同的。如果有人可以解释我可能遗失或做错的话,我将不胜感激
答案 0 :(得分:0)
struct foo* farry = malloc(2 * sizeof(struct foo));
...
int oldsize = sizeof(farry)/sizeof(farry[0]);
sizeof(farry)/sizeof(farry[0])
为您提供指针 / 大小的结构,而不是元素数。