【问题标题】:Using realloc in this code - Size of my array not increasing [duplicate]在此代码中使用 realloc - 我的数组大小不增加 [重复]
【发布时间】: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 为什么会这样?在上述情况下,旧尺寸和新尺寸相同。如果有人能解释我可能遗漏了什么或做错了什么,我将不胜感激

【问题讨论】:

    标签: c arrays


    【解决方案1】:
    struct foo* farry = malloc(2 * sizeof(struct foo)); 
    ...
    int oldsize = sizeof(farry)/sizeof(farry[0]);
    

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

    【讨论】:

    • 如果我没记错的话,实际上它很可能是零。你能解释一下它有时可以工作吗(当使用时:struct foo farry[]
    • 是的,我在这里读到stackoverflow.com/questions/15929869/…,如果它是一个指针,就不可能在数组中获取任何元素。我不确定 C 程序员如何处理这种情况?我的意思是在结构的情况下如何创建一个包含 2 个项目的数组? malloc(2 * sizeof(struct foo)); 是否正确?
    • @JamesFranco 您需要将farrystruct foos 的数量保存在单独的变量(或单独的struct)中,或者使用像链表这样的数据结构。是的,这是正确的,尽管惯例是使用 sizeof(*farry),所以如果 farry 的类型发生变化,您需要维护的代码就会减少。
    • @Jean-FrançoisFabre,它可能为零,取消引用指针 ([0]) 为您提供结构本身的大小,在我的计算机上编译 8 / 8 = 1
    • 如果你的结构足够大,是的。
    猜你喜欢
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2015-12-01
    • 2018-03-08
    • 2016-07-31
    • 2015-08-22
    相关资源
    最近更新 更多