在此代码中使用realloc - 我的数组的大小不增加

时间:2016-11-10 06:54:36

标签: c arrays

我已经用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,为什么呢?在上述情况下,旧尺寸和新尺寸是相同的。如果有人可以解释我可能遗失或做错的话,我将不胜感激

1 个答案:

答案 0 :(得分:0)

struct foo* farry = malloc(2 * sizeof(struct foo)); 
...
int oldsize = sizeof(farry)/sizeof(farry[0]);

sizeof(farry)/sizeof(farry[0])为您提供指针 / 大小的结构,而不是元素数。